您的位置:首页 > 其它

uva 11991 Easy Problem from Rujia Liu? map+vector

2014-08-02 11:17 381 查看
题意:

给定一个n个整数的数组,进行多次查询,每次查询输出第k个v的位置。

题解:

定义map<int,vector<int> >mm;那么mm[i][j]表示的就是第j+1个i的值的位置。为什么?我们将每个v映射成map中的一个键,用变长数组vector保存v的所有位置;那么mm[v]对应的就是vector,就是所有v的位置,然后查询vector中第k个元素即可。

代码:

<pre name="code" class="cpp">#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <stack>
using namespace std;

#define LL __int64
const int maxn=1e3+10;
map<int,vector<int> >mm;//> >不能连续,否则会被当错>>出现编译错误
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        int i,j,k,a,u,v;
        mm.clear();
        for(i=0;i<n;i++)
        {
            scanf("%d",&a);
            if(!mm.count(a))mm[a]=vector<int>();
            mm[a].push_back(i+1);
        }
        for(i=0;i<m;i++)
        {
            scanf("%d%d",&k,&v);
            if(mm[v].size()<k)printf("0\n");
            else printf("%d\n",mm[v][k-1]);
        }
    }
    return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: