返回主页

二分答案模板

二分答案竞赛模板,提供左边界(求最小可行解)与右边界(求最大可行解)两种写法

算法模板发布于 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) 验证