二分板子
供自己查找使用
int 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; }//用于查找左边界(范围内最小值
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;
}//用于查找右边界(范围内最大值
或者
while (l<r){ int mid=l+r+1>>1; if (i/mid<a[i]) r=mid-1; else l=mid; } return l;