题目描述
有 n(n \le 2 \times 10^6)n(n≤2×106) 名同学陆陆续续进入教室。我们知道每名同学的学号(在 1 到 10^9 之间),按进教室的顺序给出。上课了,老师想知道第 ii 个进入教室的同学的学号是什么(最先进入教室的同学 i=1i=1),询问次数不超过 10^5 次。
输入格式
第一行 2 个整数 n 和 m,表示学生个数和询问次数。
第二行 n 个整数,表示按顺序进入教室的学号。
第三行 m 个整数,表示询问第几个进入教室的同学。
这题主要是让我们初步认识vector容器,并不难,建立一个vector容器v来存放学生,通过while或for循环利用尾插法将学生依次插入容器中,可以事先在容器开头存入一个0,这样在询问时就可以直接通过下标来获得学生学号,有一点注意的是,题目要求是等询问结束后才输出答案,所以要再创建一个容器v1来存放询问的数据,最后在for循环中先通过v1获得询问的位置,再将其当成数组下标来输出,即:v[v1[i]];
#include<iostream>
using namespace std;
#include<vector>
#include<unordered_map>
#include<string>
void stu_num(int n, int m)
{
int i = 0, j = 0, a = 0;
vector<int>v;
vector<int>v1;
v.push_back(0);
while (i < n)
{
cin >> a;
v.push_back(a);
i++;
}
while (j < m)
{
cin >> a;
v1.push_back(a);
j++;
}
for (int i = 0; i < v1.size(); i++)
{
cout << v[v1[i]] << endl;
}
}
int main()
{
int n, m;
cin >> n >> m;
stu_num(n,m);
return 0;
}