uva 11991

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;
}

  

原文地址:https://www.cnblogs.com/wulangzhou/p/3333159.html