uva 11991 Easy Problem from Rujia Liu?(map应用)

题意:求数字v出现第k次的位置


用一个map维护每个数出现了多少次,再用一个map<pair<int,int>,int >来维护每个数第k次出现的位置。具体看代码实现。


代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
map <int,int>num;
map <pair<int ,int >,int > Hash;

int main(){
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        Hash.clear();
        num.clear();
        for(int i=1;i<=n;i++){
            int tmp;
            scanf("%d",&tmp);
            if(num.find(tmp)==num.end()){
                num[tmp]=1;
            }
            else num[tmp]++;
            Hash[make_pair(tmp,num[tmp])]=i;
        }
        for(int i=1;i<=m;i++){
            int k,n;
            scanf("%d%d",&k,&n);
            if(num[n]<k) printf("0\n");
            else printf("%d\n",Hash[make_pair(n,k)]);
        }
    }
    return 0;
}


你可能感兴趣的:(map)