@Yezi.press
二分答案模板
二分答案竞赛模板,提供左边界(求最小可行解)与右边界(求最大可行解)两种写法
算法模板发布于 2026/09/07#二分#二分答案
C++28 行579 Bytes
// 假设 check(mid) 在答案范围内具有单调性:
int l = 1, r = maxLen;
// 右边界型二分
while (l < r) {
int mid = (l + r + 1) / 2; // +1 防止死循环(当 l+1==r 时 mid==r)
if (check(mid)) {
l = mid;
} else {
r = mid - 1;
}
}
int ans = l;
// 左边界型二分
int l = 1, r = maxPossible;
while (l < r) {
int mid = (l + r) / 2;
if (check(mid)) {
r = mid;
} else {
l = mid + 1;
}
}
int ans = l;
// 循环结束 l == r,即为最小可行解
// 若可能无解,需用 check(l) 验证