题意:找到数组中第x个y的下标
分析:这题有很多做法,下面给出一种效率比较高的方法,即用map与vector创建一个二维都不定长且一维不定索引的二维数组,这样做方便查找但不方便进行迭代遍历
map<int , vector<int> >a;
if(!a.count(x)) a[x] = vector<int>(); // 如果x未出现过,则创建一个以x为第一维索引的不定长数组,即要查找的数为第一维,第几个为第二维
if(!a.count(y)||a[y].size()<x) printf("0\n");//第一维没有索引y或者没有x个y
a[x].push_back(i+1); // 不定长数组中储存着下标
printf("%d\n", a[y][x-1]);
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
map<int , vector<int> >a;// > > 要用空格分开
int main(){
int n,m, x,y;
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>(); // 如果x未出现过,则创建一个以x为第一维索引的不定长数组,即要查找的数为第一维,第几个为第二维
a[x].push_back(i+1); // 不定长数组中储存着下标
}
while(m--){
scanf("%d%d", &x,&y);
if(!a.count(y)||a[y].size()<x) printf("0\n");//第一维没有索引y或者没有x个y
else printf("%d\n", a[y][x-1]);
}
}
return 0;
}