题意:求数字v出现第k次的位置
用一个map维护每个数出现了多少次,再用一个map<pair<int,int>,int >来维护每个数第k次出现的位置。具体看代码实现。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <map> using namespace std; map <int,int>num; map <pair<int ,int >,int > Hash; int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ Hash.clear(); num.clear(); for(int i=1;i<=n;i++){ int tmp; scanf("%d",&tmp); if(num.find(tmp)==num.end()){ num[tmp]=1; } else num[tmp]++; Hash[make_pair(tmp,num[tmp])]=i; } for(int i=1;i<=m;i++){ int k,n; scanf("%d%d",&k,&n); if(num[n]<k) printf("0\n"); else printf("%d\n",Hash[make_pair(n,k)]); } } return 0; }