思路
-
向下取整
1
2
3
4
5
6
7
8
9
10int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}向上取整
1
2
3
4
5
6
7
8
9
10int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
拓展
- AcWing 789. 数的范围
- AcWing 22. 旋转数组的最小数字,不具有单调性,但具有二段性
- AcWing 113. 特殊排序,没有单调性,但可以二分
代码
1 |
|