二分查找模板(包括4种情况)

1、数组中 大于等于 x的 第一个位置

int BF (int x) {
    int l = 0, r = n - 1;
    while (l < r) {
        int mid = l + r >> 1;
        if (a[mid] >= x) r = mid;
        else l = mid + 1;
    }
    return r;
}

2、数组中 大于等于 x的 最后一个位置

int BF (int x) {
    int l = 0, r = n - 1;
    while (l < r) {
        int mid = l + r + 1 >> 1;
        if (a[mid] >= x) l = mid;
        else r = mid - 1;
    }
    return r;
}

3、数组中 小于等于 x的 最后一个位置

int BF (int x) {
    int l = 0, r = n - 1;
    while (l < r) {
        int mid = l + r + 1 >> 1;
        if (a[mid] <= x) l = mid;
        else r = mid - 1;
    }
    return l;
}

4、数组中 小于等于 x的 第一个位置

int BF (int x) {
    int l = 0, r = n - 1;
    while (l < r) {
        int mid = l + r  >> 1;
        if (a[mid] <= x) r = mid;
        else l = mid + 1;
    }
    return l;
}
posted @ 2022-09-16 21:00  !&&||  阅读(50)  评论(0)    收藏  举报