【算法学习】二分法模板
一、整数划分
1.数组区间为[l,r],划分为[l,mid],[mid+1,r];
int binary_search_1(int l,int r)
{
while(l<r){
mid=l+r>>1;
if(check(a[mid]))r=mid; // check()判断mid是否满足性质
else l=mid+1;
}
return l;
}
2.数组区间为[l,r],划分为[l,mid-1],[mid,r];
int binary_search_2(int l,int r)
{
while(l<r){
mid=l+r+1>>1;
if(check(a[mid]))l=mid; // check()判断mid是否满足性质
else r=mid-1;
}
return l;
}
二、浮点数二分
float binary_search_3(double l,double r)
{
while(r-l>1e-6)
{
mid=(l+r)/2;
if(check(a[mid]))r=mid;
else l=mid;
}
return l;
}