1 条题解
-
0
#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
- 上传者