题目大意:
给一个长度为 n 的数组,问第 k 次 v 的数组下标, 如果不存在输出 0。
解题思路:
理想的办法是直接输出 f[v][k];
但是v太大,数组不可能开得下mp<int,~>可以,[k]数组可以用vector<int> 来写。
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<map> using namespace std; map<int, vector<int> > a; int main() { int n,m; int k,v; int x; while(scanf("%d %d",&n,&m)!=EOF) { a.clear(); for(int i=1;i<=n;i++) { scanf("%d",&x); if(!a.count(x)) { a[x]=vector<int> (); } a[x].push_back(i); } while(m--) { scanf("%d %d",&k,&v); if(!a.count(v)) { //cout<<"fff"<<endl; printf("0\n"); } else { if(k>a[v].size()) { // cout<<" "<<a[v].size()<<endl; printf("0\n"); } else { printf("%d\n",a[v][k-1]); } } } } return 0; }