1070: PIPI的数组

题目描述

PIPI现在有一个全部为正整数组成的数组,他想知道元素 v 第 k次出现在数组中的位置,胖虎能帮帮PIPI吗?
PIPI是个好奇心很重的人,他会有m次询问哦~

输入

输入包含多组测试样例。
对于每一组测试样例,第一行包含两个正整数 n,m .代表数组的长度和询问的次数。 (1<=n,m<=105)
第二行包括n个正整数,每个正整数 v < 106。
接下来包含m组询问,每一行包含两个数字 k 和 v ,代表元素v第k次出现的下标。

输出

对于每一组测试用例,输出m次询问的结果。如果没有,输出0.

样例输入

8 4
1 3 2 2 4 3 2 1
1 3
2 4
3 2
4 2

样例输出

2
0
7
0

#include<bits/stdc++.h>
using namespace std;
int main()
{
    map<int,vector<int> >mp; //相当于一个邻接表结构 存放每个键所对应的位置
    int n,m,t,k,v;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        mp.clear();
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&t);
            mp[t].push_back(i);
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&k,&v);
            if(!mp.count(v)||mp[v].size()<k)//mp的键中不存在一个v或者size()<k 输出0
                printf("0\n");
            else
                printf("%d\n",mp[v][k-1]);
        }
    }
    return 0;
}
发布了28 篇原创文章 · 获赞 7 · 访问量 1169

猜你喜欢

转载自blog.csdn.net/weixin_44433678/article/details/104043513