题目描述
PIPI现在有一个全部为正整数组成的数组,他想知道元素 v 第 k次出现在数组中的位置,胖虎能帮帮PIPI吗?
PIPI是个好奇心很重的人,他会有m次询问哦~
输入
输入包含多组测试样例。
对于每一组测试样例,第一行包含两个正整数 n,m .代表数组的长度和询问的次数。 (1<=n,m<=105)
第二行包括n个正整数,每个正整数 v < 106。
接下来包含m组询问,每一行包含两个数字 k 和 v ,代表元素v第k次出现的下标。
输出
对于每一组测试用例,输出m次询问的结果。如果没有,输出0.
样例输入
8 4
1 3 2 2 4 3 2 1
1 3
2 4
3 2
4 2
样例输出
2
0
7
0
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<int,vector<int> >mp; //相当于一个邻接表结构 存放每个键所对应的位置
int n,m,t,k,v;
while(scanf("%d%d",&n,&m)!=EOF)
{
mp.clear();
for(int i=1;i<=n;i++)
{
scanf("%d",&t);
mp[t].push_back(i);
}
for(int i=0;i<m;i++)
{
scanf("%d%d",&k,&v);
if(!mp.count(v)||mp[v].size()<k)//mp的键中不存在一个v或者size()<k 输出0
printf("0\n");
else
printf("%d\n",mp[v][k-1]);
}
}
return 0;
}