这个题是学会使用stl中的map映像来进行匹配,相比单用纯数组要方便多了,熟练运用将会方便很多。此题只需要用map <int ,vector<int> >创建一个动态匹配,每一个key就是一个动态数组,以此来储存各个相同key的下标。
#include<stdio.h>
#include<stdlib.h>
#include<map>
#include<vector>
using namespace std;
map <int,vector<int> > m;
int main(){
int n,q,a,k,v;
while(scanf("%d %d",&n,&q)!=EOF){
m.clear();
for(int i=0;i<n;i++){
scanf("%d",&a);
if(!m.count(a)) m[a]=vector<int>();//如果是第一次插入要先声请空间
m[a].push_back(i+1);
}
for(int i=0;i<q;i++){
scanf("%d %d",&k,&v);
if(m[v].size()<k)printf("0\n");
else printf("%d\n",m[v][k-1]);
}
}
return 0;
}