二分模板

int findMinValid(int left, int right) {
    int ans = -1;
    while (left <= right) {
        int mid = (left+right)/2;
        if (check(mid)) 
		{
            // 满足条件,尝试找更小的解
            ans = mid;      // 记录当前有效解
            right = mid - 1; // 缩小右边界
        } else {
            // 不满足条件,需要增大值
            left = mid + 1;
        }
    }
    return ans; // 若返回-1表示无满足条件的值
}

int findMaxValid(int left, int right) {
    int ans = -1; // 初始化为无效值
    while (left <= right) {
        int mid = (left+right)/2;
        if (check(mid)) {
            // 满足条件,尝试找更大的解
            ans = mid;      // 记录当前有效解
            left = mid + 1; // 扩大左边界
        } else {
            // 不满足条件,需要减小值
            right = mid - 1;
        }
    }
    return ans;
}
posted @ 2025-10-03 20:58  wtnbl  阅读(4)  评论(0)    收藏  举报