算法模板
二分
FFFTTTT1
2
3
4
5
6
7
8
9
10template <typename T, typename M>
T get_first_match(T lo, T hi, M match) {
while (lo <= hi) {
T mid = lo + (hi - lo) / 2;
if(match(mid)) hi = mid - 1;
else lo = mid + 1;
}
return lo;
}
//FFFF...FFTTTT -> [lo, hi]闭区间内,寻找第一个match的值
TTTTFFFFF1
2
3
4
5
6
7
8
9
10template <typename T, typename M>
T bs(T lo, T hi, M match) {
while (lo <= hi) {
T mid = lo + (hi - lo) / 2;
if (match(mid)) lo = mid + 1;
else hi = mid - 1;
}
return hi;
}
//TTTT..TFFFF -> 寻找最后一个符合的值
整数向上取整1
[a / b] = (a + b - 1) / b
单调性枚举
单调性递增枚举
1 | template<typename M, typename I, typename R, typename U> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Frite的个人博客!