1 条题解

  • 0
    @ 2026-2-2 15:33:47
    #include<bits/stdc++.h> 
    using namespace std; 
    
    // [1] 全局变量定义
    int n, q;                // n:队伍总人数;q:查询次数
    int arr[100100];          // 存储队伍中每位同学的年龄(预留足够空间)
    struct stu {
        int l, r;            // l:年龄首次出现的位置;r:年龄最后一次出现的位置
    };
    vector<stu> brr(10100);  // 存储每个年龄对应的首次/末次位置,下标对应年龄值(年龄范围1~10000)
    
    int main() {
        // [2] 输入队伍人数和查询次数
        cin >> n >> q;
        // [3] 输入n位同学的年龄,存入数组arr
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
    
        // [4] 初始化所有年龄的首次、末次位置为-1(初始状态表示无该年龄同学)
        for (int i = 0; i <= 10100; i++) {
            brr[i].l = -1;
            brr[i].r = -1;
        }
    
        // [5] 遍历年龄数组,记录每个年龄的首次和末次出现位置
        for (int i = 0; i < n; i++) {
            // 若当前年龄的首次位置未设置(为-1),则更新为当前位置(题目位置从1开始计数)
            if (brr[arr[i]].l == -1) {
                brr[arr[i]].l = i + 1;  // 数组索引i对应实际位置i+1
            }
            // 每次遇到该年龄,更新末次位置为当前位置(保证最后一次遍历到的是末次位置)
            brr[arr[i]].r = i + 1;
        }
    
        // [6] 处理q次查询,输出对应年龄的首次和末次位置
        for (int i = 1; i <= q; i++) {
            int a;
            cin >> a;  // 输入要查询的年龄a
            // 直接输出该年龄对应的位置,未存在时默认输出-1 -1
            cout << brr[a].l << " " << brr[a].r << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1220
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    3
    已通过
    1
    上传者