二分

单调递增序列a中查找>=x的数中最小的一个

while(l<r)
{
    int mid=(l+r)>>1;
    if(a[mid]>=x) r=mid;else l=mid+1;
}
return a[l];

单调递增序列a中查找<=x的数中最大的一个

while(l<r)
{
    int mid=(l+r+1)>>1;
    if(a[mid]<=x) l=mid;else r=mid-1;
}
return a[l];

实数域上的二分

保留k位小数 eps=10^-(k+2)

while(l+eps<r)
{
    double mid=(l+r)/2;
    if(calc(mid)) r=mid;else l=mid;
}
posted @ 2020-01-15 14:12  ChildeZhe  阅读(308)  评论(0)    收藏  举报