给出一个包含n个整数的数组,你需要回答若干询问。每次询问包含两个整数k和v,输出从左到右第k个v的下标(数组下标,从左右到右编号1~n)。

【输入格式】

  输入包含多组数据。每组数据第一行为两个整数n和m(1<= n,m <=100000),第二行包含n个不超过10^6的正整数,即待查询的数组。以下m行每行包含两个整数k和v(1<=k<=n,1<=v<=10^6)。输入结束标识为EOF。

【输出格式】

  对于每个查询,输出查询结果。如果不存在,输出0.

【分析】

  从查询的角度来看,把输入组织成一个可以“只读结果"的数据结构,例如data[v][k]就是答案。但由于v的范围比较大,这里的data不应是一个数组,而是一个STL的map,也就是说data[v]指map中键v对应的”值“,由于我们要以data[v][k]访问,那么data[v]的”值“应该是一个数组,保存整数v从左到右依次出现的下标(因此第k次出现的下标就是data[v][k])。

  另外,不同整数出现的次数可能相差很大,data[v]应是一个变长数组,如vector<int>。

  代码如下:

#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
map<int,vector<int> > data; int main()
{
int n,m,v,k;
while(scanf("%d%d",&n,&m) == )
{
data.clear();
for(int i = ; i < n; i++)
{
scanf("%d",&v);
if(!data.count(v)) data[v] = vector<int>();
data[v].push_back(i+);
}
while(m--)
{
scanf("%d%d",&k,&v);
if(!data.count(v) || data[v].size() < k)
printf("0\n");
else
printf("%d\n",data[v][k-]);
}
}
system("pause");
return ;
}

Easy Problem-map和vector的使用的更多相关文章

  1. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  2. UVA 11991 Easy Problem from Rujia Liu?(vector map)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  3. uva--11991 - Easy Problem from Rujia Liu?(sort+二分 map+vector vector)

    11991 - Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for e ...

  4. uva 11991 Easy Problem from Rujia Liu? vector+map

    水题 学习一下数据的存储方法. #include<iostream> #include<cstdio> #include<cstdlib> #include< ...

  5. 【暑假】[实用数据结构]UVa11991 Easy Problem from Rujia Liu?

    UVa11991 Easy Problem from Rujia Liu?  思路:  构造数组data,使满足data[v][k]为第k个v的下标.因为不是每一个整数都会出现因此用到map,又因为每 ...

  6. HDU 5475 An easy problem 线段树

    An easy problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  7. [UVA] 11991 - Easy Problem from Rujia Liu? [STL应用]

    11991 - Easy Problem from Rujia Liu? Time limit: 1.000 seconds Problem E Easy Problem from Rujia Liu ...

  8. uva 11991 - Easy Problem from Rujia Liu?(STL)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=3142" target="_blank ...

  9. uva11991 Easy Problem from Rujia Liu?

    Though Rujia Liu usually sets hard problems for contests (for example, regional contests like Xi'an ...

  10. zzuli 1815: easy problem 打表

    1815: easy problem Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 243  Solved: 108 SubmitStatusWeb ...

随机推荐

  1. C#语法小用法

    数据在存为数据库之前,用JS的encodeURIComponent进行编码,现需要在后台代码中进行解码,实现decodeURIComponent的功能, 如下: HttpUtility.UrlDeco ...

  2. ionic build --release android

    ionic bulid android ionic build --release android keytool -genkey -v -keystore demo.keystore -alias ...

  3. exe转msi

    1.起因 由于域推送只支持msi安装包,而很多常用的工具比如Adobe Flash Player.exe.SilverLight.exe都是exe格式的,于是引出要将exe转成silent msi的工 ...

  4. C/C++中函数参数传递详解(二)

    昨天看了内存管理的有关内容,有一点了解,但不是很深入,发现之前写代码时有很多细节问题没有注意到,只知道这样做可以实现功能,却不知道为什么可以这样,对于采用自己的方法造成的隐患也未知,更不晓得还有其他方 ...

  5. C++指针详解

    指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占 ...

  6. [C/C++]C/C++相关网站

    1.http://en.cppreference.com What is the purpose of this site? Our goal is to provide programmers wi ...

  7. java基础-004

    ---恢复内容开始--- 14.Java集合类框架的基本接口 集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有 ...

  8. C#中的五个访问修饰符

    一.public, private, protected, internal, protected internal 1.public : 公开的, 公共的 2.private : 私有的 (只能在当 ...

  9. 未来WEB程序员

    作为一名程序员,如果你想在这个领域内继续向前进步或者在当前的经济形势下保持不被炒鱿鱼,那么你就决不应当自满自足,你需要继续学习.近日,著名IT评论员Justin James在他的博客中列出了未来五年程 ...

  10. javaweb-dbcp

    package cn.songxinqiang.samples.commonsdbcp.util; import java.sql.Connection;import java.sql.Databas ...