题目大意: 给出一个包含n个整数的数组,你需要回答若干询问。每次询问两个整数k和v,输出从左到右第k个v的下标(数组下标从左到右编号为1~n)。
题目分析:这道题目主要是让我理解如何使用vector和map这两个数据结构,其中vector感觉帮助很大,毕竟是一个不定长的数组,而在代码中,a【x】的值是一个数组,用来保存v出现的下标,因为如果使用定长数组可能会造成大量的空间浪费,所以选用vector,a【x】【y】就是x第v次出现的数组下标。
#include<cstdio>
#include<map>
#include<vector>
using namespace std;
map<int ,vector<int > >a;
int main(){
int n,m,x,y;
while(~scanf("%d%d",&n,&m)){
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);
}
while(m--){
scanf("%d%d",&x,&y);
if(!a.count(y) || a[y].size() < x )
printf("0\n");
else printf("%d\n",a[y][x-1]);
}
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-676845.html