题目链接。
分析:
《算法竞赛入门经典——训练指南》上的一道例(水)题,map的应用,个人感觉代码中注释掉的那一句没有什么意义,就注释掉了,提交确实也对了。
map的小知识点(总结自c++ primer):
- 对于map容器,如果下标所表示的键在容器中不存在,则添加元素。书中的例子:
map<string, int> word_count; sting word; while(cin>>word) ++word_count[word];
在单词第一次出现时,会在word_count中创建并插入一个以该单词为索引的新元素,同时将它的值初始化为0。
- 当只想要知道某元素存在,而当元素不存在时,并不想做插入运算,应当用count或find。count返回m中k的出现次数(使用方法就如本代码注释的那条一样)。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #include <stack> #include <map> using namespace std; const int maxn = 1000 + 10; map<int, vector<int> > a; int main(){ int n, m, x; while(scanf("%d %d", &n, &m) == 2){ a.clear(); for(int i=0; i<n; i++){ scanf("%d", &x); //if(!a.count(x)) a[x] = vector<int>(); a[x].push_back(i+1); } int k, v; while(m--){ scanf("%d%d", &k, &v); if(!a.count(v) || a[v].size()<k) printf("0\n"); else printf("%d\n", a[v][k-1]); } } return 0; }