一道map+vector的题。
第一次知道map里面可以使vector数组——map<int,vector<int> >a;
map的清空就一句——a.clear();
a.count(j)——统计j数组中元素的个数
if(!a.count(j)) a[j]=vector<int>();——创建数组
a[j].push_back(i)——增加元素
if(!a.count(v)||a[v].size()<k)——判断是否有第k个数的存在,第一个比较容易忽略
输出a[v][k-1],学习了——vector里面的元素是从0位开始的,所以是k-1,map内嵌数组的输出方法
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
map<int, vector<int> >a;
int main()
{
int k,n,v,i,j,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
a.clear();
for(i=1;i<=n;i++)
{
scanf("%d",&j);
if(!a.count(j))
a[j]=vector<int>();
a[j].push_back(i);
}
while(m--)
{
scanf("%d%d",&k,&v);
if(!a.count(v)||a[v].size()<k)
{
puts("0");
}
else
{
printf("%d\n",a[v][k-1]);
}
}
}
}