模板:
第一类模板:
一、区间[l,r]被划分为[l,mid]和[mid+1,r]时使用。
int bsearch_1(int l,int r)
{
while(l<r)
{
int mid=l+r>>1;
if(check(mid)) r=mid;//check()判断mid是否满足性质
else l=mid+1;
}
return l;
}
第二类模板
二、区间[l,r]被划分为[l,mid-1]和[mid,r]时使用。
整数二分
int bsearch_2(int l,int r)
{
while(l<r)
{
int mid=l+r+1>>1;
if(check(mid)) l=mid;//check()判断mid是否满足性质
else r=mid-1;
}
return l;
}
如果数据是具有单调性,一定可以找到相应的l==r,但是这时不一定符合答案。
但是一定可以找到