刘汝佳新书--训练指南
这是一道用STL解决的题,STL是神奇啊。
题意:给出一组数组,求v从左到右第K次出现的下标。
分析:因为数组有10^6规模,查询也有10^6规模,若是只用数组的话,肯定存储不了。。
// File Name: 11991.cpp // Author: zlbing // Created Time: 2013/3/6 14:59:29 #include<iostream> #include<string> #include<algorithm> #include<cstdlib> #include<cstdio> #include<set> #include<map> #include<vector> #include<cstring> #include<stack> #include<cmath> #include<queue> using namespace std; #define CL(x,v); memset(x,v,sizeof(x)); #define INF 0x3f3f3f3f #define LL long long #define REP(i,n) for(int i=0;i<n;i++) #define REP1(i,n) for(int i=1;i<n+1;i++) map<int,vector<int> > M; int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { M.clear(); REP(i,n){ int a; scanf("%d",&a); if(!M.count(a))M[a]=vector<int>(); M[a].push_back(i+1); } int a,b; REP(i,m){ scanf("%d%d",&a,&b); if(!M.count(b)||M[b].size()<a) printf("0\n"); else printf("%d\n",M[b][a-1]); } } return 0; }