题目链接:

hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5233

bc(中文):http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=585&pid=1002

题解:

离散化之后,存在一张表里面(相同的值的id号用链表串起来,倒着存),每次查询完就把表首的删了,继续查。

之前离散的时候没有把查询的一起加进去,就一直t,估计是查询的时候很多是没有结果的,就会比较耗时间。改成一起哈希之后就过了。也没有做读写优化。

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL; const int maxn=2e5+; struct Edge{
int v,ne;
Edge(int v,int ne):v(v),ne(ne){};
Edge(){};
}egs[maxn]; int n,m; int head[maxn],tot;
int ha[maxn];
int arr[maxn],q[maxn];
//将元素加入邻接表
void addEdge(int x,int id){
egs[tot]=Edge(id,head[x]);
head[x]=tot++;
}
//查询并删除
int queEdge(int x){
int p=head[x];
if(p==-) return -;
int ret=egs[p].v;
head[x]=egs[p].ne;
return ret;
}
/*
離散化去重
void get_ID(){
sort(ha,ha+n+m); ha[n+m]=ha[n+m-1]-1;
int cur=0;
for(int i=0;i<n+m;i++){
if(ha[i]!=ha[i+1]){
ha[cur++]=ha[i];
}
}
ha[n+m]=cur;
*/ //二分
int find(int x){
int lef=,rig=ha[n+m];
int ret=-;
while(lef<rig){
int mid=lef+(rig-lef)/;
if(ha[mid]<x){
lef=mid+;
}else if(ha[mid]>x){
rig=mid;
}else{
ret=mid;
break;
}
}
return ret;
} void init(){
memset(head,-,sizeof(head));
tot=;
} int main(){
while(scanf("%d%d",&n,&m)==&&n){
init();
//将输入的数和查询的数一起做离散化
for(int i=;i<n;i++){
scanf("%d",arr+i);
ha[i]=arr[i];
}
for(int i=;i<m;i++){
scanf("%d",q+i);
ha[n+i]=q[i];
}
//离散化
sort(ha,ha+n+m);
ha[n+m]=unique(ha,ha+n+m)-ha; //倒着插入,这样只要每次删除表首的数就可以了
for(int i=n-;i>=;i--){
int x=find(arr[i]);
addEdge(x,i);
}
for(int i=;i<m;i++){
int x=find(q[i]);
printf("%d\n",queEdge(x)+);
}
}
return ;
} /*
5 5
1 2 3 4 1
1 3 1 4 9
*/

HDU 5233 Gunner II 离散化的更多相关文章

  1. hdu 5233 Gunner II

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5233 简单题,stl水之... #include<algorithm> #include& ...

  2. 二分查找 BestCoder Round #42 1002 Gunner II

    题目传送门 /* 题意:查询x的id,每次前排的树倒下 使用lower_bound ()查找高度,f[i]记录第一棵高度为x树的位置,查询后+1(因为有序) */ #include <cstdi ...

  3. Gunner II(二分,map,数字转化)

    Gunner II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  4. HDU 5862 Counting Intersections(离散化+树状数组)

    HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...

  5. hdu 3436 splay树+离散化*

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. HDU 3567 Eight II(八数码 II)

    HDU 3567 Eight II(八数码 II) /65536 K (Java/Others)   Problem Description - 题目描述 Eight-puzzle, which is ...

  7. HDU 2236 无题II(二分图匹配+二分)

    HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...

  8. hdu 5233 离散化

    10^9的大数组显然开不了.所以也算比较裸的离散化了... 令pos[i].pp[j]表示从左到右第j个高度为i的树的位置 (pp是个vector,范围0..now-1) pos[i].num表示有几 ...

  9. HDU 5919 Sequence II(主席树+逆序思想)

    Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

随机推荐

  1. Node调试

    之前调试node代码简单粗暴,直接在代码打印日志,控制台观察日志,效率低下~ 原来后端node代码也可以通过Chrome断点调试,以下是调试方法. (1)找到node启动的进程 ps aux|grep ...

  2. javascript json对象操作(基本增删改查)

    /** * Json对象操作,增删改查 * * @author lellansin * @blog www.lellansin.com * @version 0.1 * * 解决一些常见的问题 * g ...

  3. ElasticSearch优化系列五:机器设置(硬盘、CPU)

    硬盘对集群非常重要,特别是建索引多的情况.磁盘是一个服务器最慢的系统,对于写比较重的集群,磁盘很容易成为集群的瓶颈. 如果可以承担的器SSD盘,最好使用SSD盘.如果使用SSD,最好调整I/O调度算法 ...

  4. 【ElasticSearch故障处理】OpenJDK 64-Bit Server VM warning

    [故障描述] VM虚拟机安装ElasticSearch集群,有三台Linux,完成安装后,执行启动命令:bin/elasticsearch -d . 运行结果报错: OpenJDK 64-Bit Se ...

  5. Go 学习之路:异常处理defer,panic,recover

    Go没有像Java那样的异常机制,它不能抛出异常.因为设计者们认为,将异常与控制结构混在一起容易使得代码变得混乱.于是乎引入Exception处理: defer,panic,recover; 简单描述 ...

  6. java虚拟机内存管理

    1. java虚拟机内存如下 2. 运行时数据区 内存图分析:

  7. Linux Shell中管道的原理及C实现框架

    在shell中我们经常用到管道,有没考虑过Shell是怎么实现管道的呢? cat minicom.log | grep "error" 标准输入.标准输出与管道 我们知道,每一个进 ...

  8. AvalonEdit-基于WPF的代码显示控件

    AvalonEdit是基于WPF的代码显示控件,项目地址:https://github.com/icsharpcode/AvalonEdit,支持C#,javascript,C++,XML,HTML, ...

  9. OAuth(开放授权)

    HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使 ...

  10. Freemarker入门(一)——入门与基本概述

    1.概述 1.文档 完美的中文文档:http://freemarker.foofun.cn/ 2.是什么 FreeMarker是一个用Java语言编写的模板引擎.它基于模板来生成文本输出.Freema ...