整数二分
int bsearch_int1(int l,int r){
while(l<r){
int mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
return l;
}
int bsearch_int2(int l,int r){
while(l<r){
int mid=(l+r+1)/2;
if(check(mid)) l=mid;
else r=mid-1;
}
return l;
}
/*为什么当l=mid时需要mid=(l+r+1)/2?
当l=r-1时,mid=(l+r)/2=l;此时l=mid=l,所形成的的区间仍然是[l,r],导致死循环
*/
实数二分
//求解某个数的二次方根
double bsearch(double x,double l,double r){
while(r-l>1e-8){
double mid=(l+r)/2;
if(mid*mid<x) l=mid;
else r=mid;
}
return l;
}