UVA(STL)11991 Easy Problem from Rujia Liu?

刘汝佳新书--训练指南

这是一道用STL解决的题,STL是神奇啊。

题意:给出一组数组,求v从左到右第K次出现的下标。

分析:因为数组有10^6规模,查询也有10^6规模,若是只用数组的话,肯定存储不了。。

// File Name: 11991.cpp
// Author: zlbing
// Created Time: 2013/3/6 14:59:29

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
using namespace std;
#define CL(x,v); memset(x,v,sizeof(x));
#define INF 0x3f3f3f3f
#define LL long long
#define REP(i,n) for(int i=0;i<n;i++)
#define REP1(i,n) for(int i=1;i<n+1;i++)
map<int,vector<int> > M;
int main(){
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        M.clear();
        REP(i,n){
        int a;
        scanf("%d",&a);
        if(!M.count(a))M[a]=vector<int>();
        M[a].push_back(i+1);
        }
        int a,b;
        REP(i,m){
            scanf("%d%d",&a,&b);
            if(!M.count(b)||M[b].size()<a)
                printf("0\n");
            else 
                printf("%d\n",M[b][a-1]);
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/arbitrary/p/2946187.html