二分查找:找到满足条件的第1个值的下标,如果没找到则输出n(r的初始值)。
1、整数二分模板
int l=0, r=n; // 确定查找区间[l, r-1]
while(l<r)
{
int m=(r-l)/2+l; // 本质上等价于(l+r)/2,但可避免爆int
if(满足条件)
r=m;
else
l=m+1;
}
cout<<l<<endl; // 答案等于满足条件的第1个值
2、实数二分模板
double l=0, r=n;
while(l+(1e-6)<r) //本质上等价于r-l > 1e-6,即误差小于10-6时看作相等
{
double mid=(l+r)/2;
if(满足条件)
r=mid;
else
l=mid;
}
printf("%.2f",l);