首页 > 其他分享 >UVA11991 Easy Problem from Rujia Liu? map+vector的妙用

UVA11991 Easy Problem from Rujia Liu? map+vector的妙用

时间:2023-02-07 17:06:51浏览次数:66  
标签:map Rujia int scanf 样例 vector include


题目描述

​PDF​

UVA11991 Easy Problem from Rujia Liu? map+vector的妙用_输入输出

输入输出格式

输入格式:

 

UVA11991 Easy Problem from Rujia Liu? map+vector的妙用_数组_02

 

输出格式:

 

UVA11991 Easy Problem from Rujia Liu? map+vector的妙用_#include_03

 

输入输出样例

输入样例#1: 复制


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


输出样例#1: 复制


2 0 7 0


思路来自:

刘汝佳:训练指南P187例题.


题意:

        给你n个数(n<=10w,但是数值<=100w),现在要你回答m个查询,对于每个查询都是k和v,要求你回答原始数据中第k个v值出现的原始下标,如果不存在输出0.

分析:

        

        首先看到本题的询问时是v和k,我想有没有什么数据结构直接用X[v][k]就能解决每个询问的?即X[v]中保存的是v这个值出现过的所有下标。由于X[v]的大小不一定且需要能随机存取(取X[v]中的第k个元素为X[v][k]),所以X[v]应该是一个vector<int>。那么X是什么呢?如果X仅仅是一个数组结构,那么我们需要一个100W大小的X数组(因为v<=100W),其实v的值并不会覆盖的那么广,所以这里我们用map<int, vector<int> > 来表示X。

        所以这里我们可以定义map<int,vector<int> > data.则每个v值对应一个v出现的所有下标构成的向量。对于每个v和k,我们可以直接通过map[v][k-1]直接输出结果(想想是不是).

代码实现:

#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<cstdio>
#include<map>
using namespace std;
#define N 1100
typedef long long ll;
map<int,vector<int> > m;
int main()
{
int n,q;
while(scanf("%d%d",&n,&q)!=-1)
{
m.clear();
for(int i=1;i<=n;i++)
{
int x;

scanf("%d",&x);
if(!m.count(x))
{
m[x]=vector<int>();

//cout<<x<<" "<<ma[x]<<endl;
}
m[x].push_back(i);
// cout<<x<<" "<<m[x].size()<<endl;
}
while(q--)
{
int x,y;
scanf("%d%d",&x,&y);
if(!m.count(y)||m[y].size()<x)
{
printf("0\n");
}
else
printf("%d\n",m[y][x-1]);
}

}
return 0;
}

 

标签:map,Rujia,int,scanf,样例,vector,include
From: https://blog.51cto.com/u_14932227/6042459

相关文章

  • CSharp: donet view mapping with EF 6
    /*functionmappinghttps://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mappingviewmappingpublicDbQuery<View_BookDetails>View_BookDe......
  • 视频直播系统源码,java中Map遍历的三种方式
    视频直播系统源码,java中Map遍历的三种方式一:在for循环中使用entries实现Map的遍历:/***最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */Map<String,String......
  • 注解 @RequestMapping @RequestParam @RequestBody
    @RequestMapping  @RequestParam @RequestBody @PathVariable与@RequestParam的区别1)相同点A.作用位置相同:都是直接修饰方法参数变量;B.功能相似:都......
  • ObjectMapper 对象之间转换,针对两个对象属性名称不一样,这里用特性来关联
    ///<summary>///序列化+反射转换(针对两个对象属性名称不一样,这里用特性来关联)///</summary>///<typeparamname="TObject">目......
  • Map 键/值使用,
    初始化Map,在创建的同时初始化实例,可以给Map构造函数传入一个可迭代对象,需要包含键/值对数组。//使用嵌套数组初始化映射constm1=newMap([["key1","val1"],......
  • List<Map<String, Object>> 去出重复
    List<Map<String,Object>>去出重复publicstaticvoidmain(String[]args){String[]array={"name","age"};List<Map<String,Object>>oldList=getTe......
  • CSharp: donet 7 Stored procedure mapping with Entity Framework core 7
    sql:IFEXISTS(select*fromsysobjectswhereid=object_id(N'[dbo].People')andOBJECTPROPERTY(id,N'IsUserTable')=1)DROPTABLEPeopleGOCREATETABLE......
  • map c++
    C++map用法总结(整理)1,map简介map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value......
  • CAN通信协议教程(Vector)
    概述本文转载自Vector官方教程-->VectorE-Learning,为方便查阅转载在此,其他详细课程和帮助还请在官方网站查阅。CAN学习模块目标群体该在线学习模块适用于所有希望......
  • Vue中使用百度地图,使用插件Vue-Baidu-Map
    项目开发需要使用的地图,通过列表选择地方,在地图中显示对应的位置信息。这里使用百度地图一,获取应用AK1、进入百度地图开放平台:https://lbsyun.baidu.com/2、注册账号3......