uva 11991 - Easy Problem from Rujia Liu?
题意:
给定一个n个整数的数组,进行多次查询,每次查询输出第k个v的位置。
题解:
定义map<int,vector<int> >mm;那么mm[i][j]表示的就是第j+1个i的值的位置。为什么?我们将每个v映射成map中的一个键,用变长数组vector保存v的所有位置;那么mm[v]对应的就是vector,就是所有v的位置,然后查询vector中第k个元素即可。
1 #include<cstdio> 2 #include<map> 3 #include<vector> 4 using namespace std; 5 map<int ,vector<int> > mm; 6 int main(){ 7 int n,m,a, k,v; 8 while(scanf("%d%d",&n,&m)==2){ 9 mm.clear(); 10 for(int i=1;i<=n;i++){ 11 scanf("%d",&a); 12 mm[a].push_back(i); 13 } 14 while(m--){ 15 scanf("%d%d",&k,&v); 16 if(mm[v].size()<k) printf("0\n"); 17 else printf("%d\n",mm[v][k-1]); 18 } 19 } 20 return 0; 21 22 }
xcode 不完美;