l + r >> 1 和 l + r + 1 >> 1的区别
l + r >> 1
是向下取整,l + r + 1 >> 1
是向上取整
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid; // check()判断mid是否满足性质
else l = mid + 1;
}
return l;
r = mid,是向下取整的,所以一定比r小,
l = mid + 1,一定比l大
int 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;
}