给出一个包含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>。

  代码如下:

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <vector>
  4. #include <map>
  5. using namespace std;
  6. map<int,vector<int> > data;
  7.  
  8. int main()
  9. {
  10. int n,m,v,k;
  11. while(scanf("%d%d",&n,&m) == )
  12. {
  13. data.clear();
  14. for(int i = ; i < n; i++)
  15. {
  16. scanf("%d",&v);
  17. if(!data.count(v)) data[v] = vector<int>();
  18. data[v].push_back(i+);
  19. }
  20. while(m--)
  21. {
  22. scanf("%d%d",&k,&v);
  23. if(!data.count(v) || data[v].size() < k)
  24. printf("0\n");
  25. else
  26. printf("%d\n",data[v][k-]);
  27. }
  28. }
  29. system("pause");
  30. return ;
  31. }

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. bzoj 1877: [SDOI2009]晨跑

    #include<cstdio> #include<iostream> #include<cstring> #define M 6009 #define inf 2 ...

  2. hdu 4627 The Unsolvable Problem

    http://acm.hdu.edu.cn/showproblem.php?pid=4627 分类讨论一下就可以 代码: #include<iostream> #include<cs ...

  3. SQlServer 从系统表 sysobjects 中获取数据库中所有表或存储过程等对象

    [sysobjects] 一.概述 系统对象表. 保存当前数据库的对象,如约束.默认值.日志.规则.存储过程等,该表中包含该数据库中的表 存储过程 视图等所有对象 在sqlserver2005,sql ...

  4. lucas 定理学习

    大致意思就是求组合数C(n , m) % p的值, p为一个偶数 可以将组合数的n 和 m都理解为 p 进制的表示 n  = ak*p^k + a(k-1)*p^(k-1) + ... + a1*p ...

  5. java---数据格式的验证

    package cc.cococ.trade.util; import java.util.regex.Matcher; import java.util.regex.Pattern; public ...

  6. android 之 XMLPull

    Pull解析 Pull的XML解析操作与SAX解析操作类似,也是采用事件驱动的方式.当XML文档开始解析或者遇到节点时都会有相应的事件代码触发. 主要涉及两个类: org.xmlpull.v1.Xml ...

  7. <矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置>

    //矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置 #include<stdio.h> #include<stdlib.h> #define M 2 #define N 3 #d ...

  8. IIS使用问题

    1.System.Data.SQLite”或它的某一个依赖项.试图加载格式不正确的程序:修改IIS应用程序池的高级设置将32位设置成true

  9. objectarx 卸载加载arx模块

    通常情况下,加载卸载arx模块是使用 APPLOAD命令 使用ObjectARX 代码操作,也非常简单,使用2个全局函数即可,参数为名字有扩展名 C++ int acedArxLoad( const ...

  10. cookie 内容的获取

    NSMutableArray *cookiesStoreAll = [[NSMutableArray alloc]init]; NSUInteger totalNumberOfCookies;     ...