二分模版
求下边界(第一个满足条件的)
int find_low(int x)
{
int mid,l=1,r=n;
while(l<=r)
{
mid=l+(r-l)/2;
if(a[mid]<x) l=mid+1;
else r=mid-1;
}
return l;
}
求上边界(最后一个满足条件的)
int find_up(int x)
{
int mid,l=1,r=n;
while(l<=r)
{
mid=l+(r-l)/2;
if(a[mid]<=x) l=mid+1;
else r=mid-1;
}
return l;
}
实数二分
bool check(double x)
{
...//由题意判断
return true;
}
double binary(double x)
{
double mid,l=0,r=1e9;
while(r-l>=eps)
{
mid=(l+r)>>1;
if(check(mid)) l=mid; //这是单调递增时的二分边界修改
else r=mid;
}
return l;
}