二分查找和二分答案(最大的最小,最小的最大,最值问题)。
//二分查找可用lower_bound和upper_bound函数实现
//最大
long long l = 最小可能值, r = 最大可能值, ans = 0;
while (l <= r) {
long long mid = l + (r - l) / 2;
if (check(mid)) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
cout << ans << endl;
//最小
long long l = 最小可能值, r = 最大可能值, ans = 0;
while (l <= r) {
long long mid = l + (r - l) / 2;
if (check(mid)) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
cout << ans << endl;
//浮点二分
double l = 左边界, r = 右边界;
const double eps = 1e-8;
while (r - l > eps) {
double mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
cout<< l ;