10^9的大数组显然开不了。所以也算比较裸的离散化了。。。

令pos[i].pp[j]表示从左到右第j个高度为i的树的位置  (pp是个vector,范围0..now-1)

 pos[i].num表示有几个高度为i的树

 pos[i].now表示当前kill到第几个了(从0开始计数)

离散化模板get:

 int Bin(int key,int n,int X[])
{
int l = , r = n - ;
while (l <= r)
{
int m = (l + r) >> ;
if (X[m] == key) return m;
if (X[m] < key) l = m + ;
else r = m - ;
}
return -;
} int main()
{
//balabala nnd=;
for(int i=; i<=N; i++)
{
scanf("%d",&h[i]);
X[nnd++]=h[i]; //先用数组X[1..m]存下这些数
}
sort(X,X+nnd); //然后对X从小到大排序
int m=;
for(int i=; i<nnd; i++) //去重
if(X[i]!=X[i-]) X[m++]=X[i];
sort(X,X+m); //再排序一遍 scanf("%d",&p);
int hs=Bin(p,m,X); //hs就是p离散化之后的值 //balabala
}

AC Code:

 #include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; struct abc
{
vector<int> pp; //[0..num-1]
int num=;
int now=;
} pos[]; int N,M,nnd;
int h[];
int Q;
int X[]; int Bin(int key,int n,int X[])
{
int l = , r = n - ;
while (l <= r)
{
int m = (l + r) >> ;
if (X[m] == key) return m;
if (X[m] < key) l = m + ;
else r = m - ;
}
return -;
} int main()
{
while(cin>>N>>M)
{
memset(pos,,sizeof(pos));
nnd=;
for(int i=; i<=N; i++)
{
scanf("%d",&h[i]);
X[nnd++]=h[i];
}
sort(X,X+nnd);
int m=;
for(int i=; i<nnd; i++)
if(X[i]!=X[i-]) X[m++]=X[i];
sort(X,X+m);
//Bin(p,m,X); for(int i=; i<=N; i++)
{
int tmp=Bin(h[i],m,X);
pos[tmp].num++;
pos[tmp].pp.push_back(i);
} for(int i=; i<=M; i++)
{
scanf("%d",&Q);
int tmp=Bin(Q,m,X);
if(pos[tmp].num==)
printf("-1\n");
else
{
int tm=pos[tmp].now;
pos[tmp].now++;
pos[tmp].num--;
int ans=pos[tmp].pp[tm];
printf("%d\n",ans);
}
} } return ;
}

hdu 5233 离散化的更多相关文章

  1. R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数

    R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...

  2. HDU 5233 Gunner II 离散化

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5233 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  3. HDU 2836 (离散化DP+区间优化)

    Reference:http://www.cnblogs.com/wuyiqi/archive/2012/03/28/2420916.html 题目链接: http://acm.hdu.edu.cn/ ...

  4. hdu 5233 Gunner II

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

  5. (转)hdu 3436Queue-jumpers--splay+离散化

    dalao博客 http://acm.hdu.edu.cn/showproblem.php?pid=3436 题意:初始排列1到N,现在要你实现3种操作: 将x插入到队头去 询问x当前的位置 询问第x ...

  6. hdu 5009 离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=5009 有一段序列,涂连续一段子序列的代价为该子序列出现不同数字个数的平方,求最小代价涂完整个序列. ai有10^ ...

  7. hdu -4325-Flowers(离散化 线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=4325: 题目意思: 给你N个花开的时间段,然后在有M个时间点,问你在这个时间点有多少花开着. 昨天刚做的一个类似 ...

  8. hdu 4833 离散化+dp ****

    先离散化,然后逆着dp,求出每个点能取到的最大利益,然后看有没有钱,有钱就投 想法好复杂 #include <stdio.h> #include <string.h> #inc ...

  9. HDU 5925 离散化

    东北赛的一道二等奖题 当时学长想了一个dfs的解法并且通过了 那时自己也有一个bfs的解法没有拿出来 一直没有机会和时ji间xing来验证对错 昨天和队友谈离散化的时候想到了 于是用当时的思路做了一下 ...

随机推荐

  1. Xcode里-ObjC, -all_load, -force_load

    最近在做一个项目的时候,需要使用到一个第三方库,这个库的使用向导里面特别说明,在添加完该库后,需要在Xcode的Build Settings下Other Linker Flags里面加入-ObjC标志 ...

  2. Visual Studio 2012 cannot identify IHttpActionResult

    使用ASP.NET Web API构造基于restful风格web services,IHttpActionResult是一个很好的http结果返回接口. 然而发现在vs2012开发环境中,Syste ...

  3. 用C++和shell获取本机CPU、网卡IO、内存、磁盘等的基本信息

    用C++和shell获取本机CPU.网卡.内存.磁盘等的基本信息: 由于对C++相关的函数没多少了解,但是觉得用shell反而相对简单一些: 一.shell脚本,用来辅助C++获取主机的资源使用信息 ...

  4. spring: 加载远程配置

    通常在spring应用中,配置中的properties文件,都是打包在war包里的,部署规模较小,只有几台服务器时,这样并没有什么大问题.如果服务器多了,特别是集群部署时,如果要修改某一项配置,得重新 ...

  5. log4j2 与 spring mvc整合

    log4j2不仅仅是log4j的简单升级,而是整个项目的重构,官网地址:http://logging.apache.org/log4j/2.x/,大家可以从官网的介绍看出它相比log4j第1代的种种优 ...

  6. [BZOJ1564][NOI2009]二叉查找树(区间DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1564 分析: 首先因为每个点的数据值不变,所以无论树的形态如何变,树的中序遍历肯定不变 ...

  7. FileShare枚举的使用(文件读写锁)

    开发过程中,我们往往需要大量与文件交互,但往往会出现很多令人措手不及的意外,所以对普通的C#文件操作做了一次总结,问题大部分如下: 1:写入一些内容到某个文件中,在另一个进程/线程/后续操作中要读取文 ...

  8. getopt

    头文件 #include<unistd.h> 定义函数 int getopt(int argc,char * const argv[ ],const char * optstring); ...

  9. 理解MySQL数据库覆盖索引

    话说有这么一个表: CREATE TABLE `user_group` ( `id` int(11) NOT NULL auto_increment, `uid` int(11) NOT NULL, ...

  10. 如何升级Ceph版本及注意事项

    升级软件版本在日常运维中是一个常见操作. 本文分享一下Ceph版本升级的一些经验. 一般升级流程和注意如下: 1.  关注社区Release notes 和 ceph-user邮件订阅列表,获取社区发 ...