STL 使用,,由于数据范围没有 超越极限数据 依旧可以用 vector 搞定;
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<utility>
#include<vector>
using namespace std;
pair<int,vector<int> >b;
map<int,vector<int> >a;
vector<int>v[1000006];
int main( )
{
int N,M;
while( scanf("%d%d",&N,&M) != EOF )
{
for( int i = 0; i < 1000006; i++ )
v[i].clear();
for( int i = 1; i <= N; i++ )
{
int a; scanf("%d",&a);
v[a].push_back( i );
}
for( int i = 1; i <= M; i++ )
{
int k,num; scanf("%d%d",&k,&num);
if( v[num].size() && v[num].size() >= k )cout<<v[num][k-1]<<endl;
else puts("0");
}
}
return 0;
}
但数据范围变大的时候, 单单 一个 vector 就搞不定了; 需要 map 一起使用;
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<utility>
#include<vector>
using namespace std;
pair<int,vector<int> >b;
map<int,vector<int> >a;
vector<int>v[1000006];
int main( )
{
int N,M;
while( scanf("%d%d",&N,&M) != EOF )
{
a.clear();
for( int i = 1; i <= N; i++ )
{
int c; scanf("%d",&c);
if( a.find(c) == a.end() )a[c] = vector<int>();
a[c].push_back( i );
}
for( int i = 1; i <= M; i++ )
{
int k,num; scanf("%d%d",&k,&num);
if( a.find(num) == a.end() || a[num].size() < k )puts("0");
else printf("%d
",a[num][k-1]);
}
}
return 0;
}