二分
单调递增序列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; }

浙公网安备 33010602011771号