整数域上的二分(两种写法任取其一均可)
//第一种
while(l<r)
{
int mid=l+r>>1;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
//第二种
while(l<r)
{
int mid=l+r+1>>1;//防止死循环
if(a[mid]<=x) l=mid;
else r=mid-1;
}
实数域上的二分
一般根据题目要求的精度范围再向下精确2位
比如:题目要求精确到1e-3,我们二分时则要精确到1e-5
while(r-l>eps)//eps=1e-5
{
double mid=(l+r)/2;
if(check(mid)) l=mid;//如果mid满足条件
else r=mid;
}
二分答案转化为判定在我的另外一篇博客<最佳牛围栏>里