二分
- 整数二分
理解:
模板1:求最大值(右边的箭头)
while(l<r){
int mid=(l+r+1)/2;
if(check(mid)){
l=mid;
}
else{
r=mid-1;
}
}
模板2:求最小值(左边的箭头)
while(l<r){
int mid=(l+r)/2;
if(check(mid)){
r=mid;
}
else{
l=mid+1;
}
}
- 浮点数二分
与整数二分的区别:不需要处理边界问题
模板:
while(r-l<1e-4){
double mid=(l+r)/2;
if(check(mid))
l=mid;
else
r=mid;
}