有序整数序列二分找到其中x的点:
两种模板
1.
int bsearch_(int q[],int l,int r)
{
while(l<r)
{ mid=l+r>>1;
if(check(q[mid])) r=mid;//check == q[mid]>=q[x];
else l=mid+1;
}
return l;
}
2.
int bsearch_(int q[],int l,int r)
{
while(l<r)
{ mid=l+r+1>>1;
if(check(q[mid])) l=mid;//check == q[mid]<=q[x];
else r=mid-1;
}
return l;
}
浮点数(求根号x的值)二分
double l=0,r=x;
while(r-l>1e-8)
{
double mid=(l+r)/2.0;//针对于浮点数不可用位运算 not l+r>>1;
if(mid*mid>x) r=mid;
else l=mid;// 浮点数不用+1-1的
}