您的位置:首页 > 其它

UVA11991线性查询

2014-01-18 17:10 260 查看
UVA11991线性查询

【题目描述】:给出一个包含n个整数的数组,你要回答若干次询问。每次询问两个整数k和v,输出从左到右第k个v的小标(从左到右是1....n)

【算法分析】:Map和vector的使用

详细方法见代码,注意map的使用,这道题在UVA10635王子和公主中可以有新的应用。

【完整代码】:

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<stdlib.h>

#include<math.h>

#include<queue>

#include<vector>

#include<map>

#define MAXN 100000+5

#define MAXM 20000+5

#define oo 9556531

#define eps 0.000001

#define PI acos(-1.0)//这个精确度高一些

#define REP1(i,n) for(int i=0;i<=(n);i++)

#define REP2(i,n) for(int i=1;i<=(n);i++)

using namespace std;

map<int ,vector<int> >Map;//后面的>不要连写

int n,m;

int main()

{

//    freopen("in","rb",stdin);

//    freopen("out","wb",stdout);

while(cin>>n>>m)

{

Map.clear();

for(int i=1;i<=n;i++)

{

int k;

cin>>k;

if (!Map.count(k))//没查找到关键字

Map[k]=vector<int>();

Map[k].push_back(i);

}

for(;m;m--)

{

int x,p;

cin>>p>>x;

if(!Map.count(x) || Map[x].size() < p) cout<<"0"<<endl;

else cout<<Map[x][p-1]<<endl;//注意存储个数

}

}

return 0;

}


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