UVA 11991 Easy Problem from Rujia Liu?

来源:互联网 发布:淘宝怎么邮费退款 编辑:程序博客网 时间:2024/05/16 17:35

题意:给出一个包含n个数的数组,每次询问两个整数k和v,输出从左到右第k个v的下标。

思路:利用STL中的vector和map构造一个数组,用来储存每个v的下标。

 

代码:

 

#include <iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;const int maxn=100000+10;vector<int>g[maxn];int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    int n,m;    while(cin>>n>>m)    {        map<int,int>mp;        for(int i=0;i<=n;++i)            g[i].clear();        int tp,s=1;        for(int i=1;i<=n;++i)        {            cin>>tp;            if(mp[tp]==0)            {                mp[tp]=s;                g[s].push_back(i);                s++;            }            else            {                g[mp[tp]].push_back(i);            }        }        int k,v;        for(int i=0;i<m;++i)        {            cin>>k>>v;            int u=mp[v];            int sz=g[u].size();            if(mp[v]==0||sz<k)            {                cout<<0<<endl;                continue;            }            cout<<g[u][k-1]<<endl;        }    }    return 0;}


 

原创粉丝点击