// 假设 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) 验证