【学好算法】算法基础3——整数二分模板
图解
代码
//检查是否满足某种性质
bool check(int x)
{
//写一大堆,嘻嘻嘻嘻
}
//区间【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
}
//区间【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;
else r=mid-1;
}
return l;//返回l
}