向左寻找目标
while(l<r){ //向左寻找目标,或找大于等于目标的最小值(从小到大
int mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
向右寻找目标
while(l<r){ //向右寻找目标,或找小于等于目标的最大值(从小到大
int mid=(l+r+1)/2;
if(check(mid)) l=mid;
else r=mid-1;
}
浮点二分
while(r-l>1e-5){ //确保精度,题目要求保留小数点位数+2
double mid=(l+r)/2;
if(check(mid)) l=mid; //或者 r=mid
else r=mid; //或者 l=mid;
}
库函数STL
lower_bound(begin,end,num)
//从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end
lower_bound(begin,end,num,greater<type>())
//从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end
如要去掉查找等于的数,则将lower改成upper
此函数返回值要减去起始地址begin,得到找到数字在数组中的下标