1、手写二分查找:找到满足条件的第1个值的下标,如果没找到则输出n(r的初始值)
// 二分模板
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、例题:#11579. 求平方根
using ll = long long;
int main() {
ll x;
cin >> x;
ll l = 0, r = x + 1;
while (l < r) {
ll m = (r - l) / 2 + l;
if (m * m >= x)
r = m;
else
l = m + 1;
}
if (l * l == x)
cout << l;
else
cout << l - 1;
return 0;
}