大佬们救救,用二分做的,但一直出问题
查看原帖
大佬们救救,用二分做的,但一直出问题
938991
zdrtgb159753楼主2025/2/6 11:20
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
int a[N], len;

//deepseek的
int bfind_l(int x) {
    int l = 0, r = len-1;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (a[mid] >= x) r = mid - 1;
        else l = mid + 1;
    }
    return l;
}

int bfind_r(int x) {
    int l = 0, r = len-1;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (a[mid] <= x) l = mid + 1;
        else r = mid - 1;
    }
    return r;
}

//我的
int bfind_l(int x){
//     int l = 0, r = len-1;
//     while(l < r){
//         int mid = (l+r)/2;
//         if(a[mid] >= x) r = mid;
//         else l = mid + 1;
//     }
//     return l;
// }

// int bfind_r(int x){
//     int l = 0, r = len-1;
//     while(l < r){
//         int mid = (l+r+1)/2;
//         if(a[mid] <= x) l = mid;
//         else r = mid - 1;
//     }
//     return l;
// }

int main() {
    int q;
    cin >> q;
    while (q-- > 0) {
        int op, x;
        cin >> op >> x;
        if (op == 1) {
            int p = bfind_l(x);
            printf("%d\n", p + 1);
        } else if (op == 2) {
            printf("%d\n", a[x - 1]);
        } else if (op == 3) {
            int p = bfind_l(x) - 1;
            if (p >= 0) printf("%d\n", a[p]);
            else printf("-2147483647\n");
        } else if (op == 4) {
            int p = bfind_r(x) + 1;
            if (p < len) printf("%d\n", a[p]);
            else printf("2147483647\n");
        } else if (op == 5) {
            int p = bfind_l(x);
            for (int i = len; i > p; --i) a[i] = a[i - 1];
            a[p] = x;
            len++;
        }
    }
    return 0;
}

我的只能过最后一个,但deepseek的可以全部过,但我看了一下这两个二分的输出结果不都一样吗

2025/2/6 11:20
加载中...