zawatins-library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub zawa-tin/zawatins-library

:heavy_check_mark: binary-seach (整数二分探索)
(src/template/binary-search.hpp)

概要

与えられた範囲 $l, r$ と単調性関数 $f\ :\ {\ p\ \mid\ p\ \in\ \mathbb{Z},\ l\ \le\ p\ \le\ r\ } \rightarrow\ {\ \text{false},\ \text{true}\ }$ について $f(p)$ の値が変化する境界値を発見します。

機能

関数

T zawa::binary_search<T, F>(T ok, T ng, const F& f)

参考

tweet by @meguru_comp

Verified with

Code

#pragma once

#include <cmath>

namespace zawa {

template <class T, class F>
T binary_search(T ok, T ng, const F& f) {
	while (std::abs(ok - ng) > 1) {
		T mid = ((ok + ng) >> 1);
		if (f(mid)) {
			ok = mid;
		}
		else {
			ng = mid;
		}
	}
	return ok;
}

}
#line 2 "src/template/binary-search.hpp"

#include <cmath>

namespace zawa {

template <class T, class F>
T binary_search(T ok, T ng, const F& f) {
	while (std::abs(ok - ng) > 1) {
		T mid = ((ok + ng) >> 1);
		if (f(mid)) {
			ok = mid;
		}
		else {
			ng = mid;
		}
	}
	return ok;
}

}
Back to top page