[uva11991]map和vector的入门
给你一个长度为n的数组,进行m次询问,每次询问输入k和v,输出第k次出现v时的下标是多少。
n<=1e6
用vector动态开空间,map使数值结合。map每次查找效率大约为logn。
map的学习资料https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<cmath> 7 #include<vector> 8 #include<map> 9 using namespace std; 10 11 map< int,vector<int> > a; 12 13 int main() 14 { 15 freopen("a.in","r",stdin); 16 freopen("a.out","w",stdout); 17 int n,m,x,k; 18 while(scanf("%d%d",&n,&m)!=EOF) 19 { 20 a.clear(); 21 for(int i=1;i<=n;i++) 22 { 23 scanf("%d",&x); 24 if(!a.count(x)) a[x]=vector<int>(); 25 a[x].push_back(i); 26 } 27 for(int i=1;i<=m;i++) 28 { 29 scanf("%d%d",&k,&x); 30 if(!a.count(x) || a[x].size()<k) printf("0\n"); 31 else printf("%d\n",a[x][k-1]); 32 } 33 } 34 return 0; 35 }