hdu 5493 Queue treap实现将元素快速插入到第i个位置
input
T 1<=T<=1000
n 1<=n<=100000
h1 k1
h2 k2
... ...
hn kn
1<=hi<=1e9 0<=ki<=n-1
sum(n)<=1e6
hi!=hj(i!=j)
output
hi指第i个人的身高,ki指这个人前面或者后面比他高的人数
Case #cas: 输出可能的最小序列,没有输出impossible
做法:将所有人按身高排序,从高到低插入数组中,则插入到第i个人时,数组里所有人都比他高,用treap实现,每个人有两个位置可以插入,每次插入到小的位置
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
#define MAX 100000
#define LL long long
int cas=,T,first,a[MAX+][];
struct node
{
node*ch[];
int r,v,sz;
void maintain() { sz=(ch[]?ch[]->sz:)+(ch[]?ch[]->sz:)+; }
};
void rotate(node* &o,int d)
{
node*k=o->ch[d^];o->ch[d^]=k->ch[d];k->ch[d]=o;
o->maintain();k->maintain();o=k;
}
void insert(node* &o,int pos,int &x)
{
if(o==NULL)
{
o=new node();
o->ch[]=o->ch[]=NULL;
o->v=x;o->r=rand();
o->sz=;
return;
}
o->sz++; //易错,旋转时可能没旋转到该结点,导致没更新,所以在插入后要++
int d;
if(pos <= (o->ch[]?o->ch[]->sz:)) d=;
else { d=;pos -= (o->ch[]?o->ch[]->sz:)+; }
insert(o->ch[d],pos,x);
if(o->ch[d]->r > o->r) rotate(o,d^);
}
void read(node*u)
{
if(u==NULL) return;
read(u->ch[]);
printf(" %d",u->v);
read(u->ch[]);
delete u;
}
int cmp(const void*a,const void*b) { return *(int*)b-*(int*)a; }
int main()
{
//freopen("/home/user/桌面/in","r",stdin);
scanf("%d",&T);
int n;
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d%d",&a[i][],&a[i][]);
qsort(a+,n,sizeof(a[]),cmp);
int i;
node *root=NULL;
for(i=;i<=n;i++)
{
if(a[i][]>=i) break;
int pos=std::min(a[i][],i--a[i][]);
insert(root,pos,a[i][]);
}
printf("Case #%d:",cas++);
if(i<=n) { puts(" impossible");continue; }
read(root);
printf("\n");
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return ;
}
hdu 5493 Queue treap实现将元素快速插入到第i个位置的更多相关文章
- HDU 5493 Queue 树状数组
		
Queue Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5493 Des ...
 - 【线段树】HDU 5493 Queue (2015 ACM/ICPC Asia Regional Hefei Online)
		
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5493 题目大意: N个人,每个人有一个唯一的高度h,还有一个排名r,表示它前面或后面比它高的人的个数 ...
 - hdu 5493 Queue(线段树)
		
Problem Description N people numbered to N are waiting in a bank for service. They all stand in a qu ...
 - hdu 5493 Queue 树状数组第K大或者二分
		
Queue Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - HDU 5493 Queue
		
Queue Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - HDU 5493 Queue  树状数组+二分
		
Queue Problem Description N people numbered from 1 to N are waiting in a bank for service. They all ...
 - HDU 5493 Queue 【线段树】
		
<题目链接> 题目大意:给你n个人的身高和他前面或者后面身高大于他的人的个数,求一个字典序最小的满足此条件的序列,如果不存在输出“impossible”. 解题分析: 因为要保证字典序最小 ...
 - HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)
		
按身高排序,每个人前面最高的人数有上限,如果超出上限说明impossible, 每次考虑最小的人,把他放在在当前的从左往右第k+1个空位 因为要求字典序最小,所以每次k和(上限-k)取min值. 没有 ...
 - Q - Queue HDU - 5493(树状树组维护区间前缀和 + 二分找预留空位)
		
Q - Queue HDU - 5493 Problem Description NNN people numbered from 1 to NNN are waiting in a bank for ...
 
随机推荐
- [SQL基础教程] 2-1 SELECT语句基础
			
[SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...
 - Aa3.0 事件机制
			
说明:本文由多处网络文章整理而成,在此未一一注明原文链接,敬请谅解! AS3:事件流机制 事件流 只要发生事件,Flash Player就会调度该事件对象. 如果事件目标不在显示列表中,则Flash ...
 - ring3 hook ZwWriteVirtualMemory
			
typedef LONG NTSTATUS;typedef NTSTATUS (NTAPI *PNtZwWriteVirtualMemory) ( IN HANDLE hProcess, IN PVO ...
 - UEFI主板GPT方式安装CentOS6.4
			
1. 设置BIOS:禁用CSM,禁用安全启动: 或不用禁用CSM,但以EFI方式安装系统: 2. 使用Diskgen或类似工具把硬盘格式为GPT格式(可以建立多于4个的主分区了): 3. 官 ...
 - 子字符查找KMP算法 - 子串自匹配索引表
			
public static int[] kmpTable(char[] seq) { int[] tbl = new int[seq.length]; tbl[0] = 1; for (int i = ...
 - Hadoop实践
			
1.将HDFS中的文本文件读取并以JSON格式转存到MongoDB时,报磁盘不足的异常. 实验室的5台计算机的存储空间都在500G以上,就目前存储的数据量来看,完全达不到磁盘接近饱和的状态.通过查看H ...
 - Weex-进阶笔记一
			
p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px Helvetica; color: #454545 } p.p2 { margin: 0.0p ...
 - 关于微信端不支持window.location.reload()
			
今天写了一个调查问卷页面,项目经理说要表单提交之后页面刷新,之间没沟通清楚,以为整个页面重载,所以刚开始就用了window.location.reload()的方法. 但是发现,在微信直接打开之后,居 ...
 - android 5.0 -- Palette
			
Palette用来从图片资源中获取颜色内容. 下面是个对颜色值使用的工具类: public class PaletteUtils { public static int getColorWithDef ...
 - awk学习笔记一:基础(转)
			
awk内置变量 ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命 ...