全部评论 2

  • 嗯,对我很有帮助

    2026-09-19 来自 新疆

    0
  • #include <bits/stdc++.h>
    using namespace std;

    const int MAXN = 1000005; // 修正数组大小
    int n, m;
    int a[MAXN];

    // 修正后的二分:查找第一个等于 x 的位置
    int erfen(int x) {
    int L = 1;
    int R = n;
    int ans = -1;

    while (L <= R) {
        int mid = L + (R - L) / 2; // 防止溢出
        
        if (a[mid] >= x) {
            // 如果中间值 >= x,说明第一个 x 可能在 mid 或者 mid 左边
            if (a[mid] == x) {
                ans = mid; // 记录当前找到的位置
            }
            R = mid - 1; // 关键:继续向左搜索,看有没有更靠前的 x
        } else {
            // a[mid] < x,目标肯定在右边
            L = mid + 1;
        }
    }
    return ans;
    

    }

    int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    
    for (int i = 1; i <= m; i++) {
        int x;
        cin >> x;
        cout << erfen(x) << " ";
    }
    return 0;
    

    }

    2026-09-11 来自 四川

    0

热门讨论