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个位置的更多相关文章

  1. HDU 5493 Queue 树状数组

    Queue Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5493 Des ...

  2. 【线段树】HDU 5493 Queue (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5493 题目大意: N个人,每个人有一个唯一的高度h,还有一个排名r,表示它前面或后面比它高的人的个数 ...

  3. hdu 5493 Queue(线段树)

    Problem Description N people numbered to N are waiting in a bank for service. They all stand in a qu ...

  4. hdu 5493 Queue 树状数组第K大或者二分

    Queue Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  5. HDU 5493 Queue

    Queue Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  6. HDU 5493 Queue 树状数组+二分

    Queue Problem Description N people numbered from 1 to N are waiting in a bank for service. They all ...

  7. HDU 5493 Queue 【线段树】

    <题目链接> 题目大意:给你n个人的身高和他前面或者后面身高大于他的人的个数,求一个字典序最小的满足此条件的序列,如果不存在输出“impossible”. 解题分析: 因为要保证字典序最小 ...

  8. HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)

    按身高排序,每个人前面最高的人数有上限,如果超出上限说明impossible, 每次考虑最小的人,把他放在在当前的从左往右第k+1个空位 因为要求字典序最小,所以每次k和(上限-k)取min值. 没有 ...

  9. Q - Queue HDU - 5493(树状树组维护区间前缀和 + 二分找预留空位)

    Q - Queue HDU - 5493 Problem Description NNN people numbered from 1 to NNN are waiting in a bank for ...

随机推荐

  1. [Q]注册申请码获取工具问题

    问题一: 异常信息: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.Reflectio ...

  2. 链表中LinkList L与LinkList *L 借鉴

    链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L->next,(*L)->next的区别typedef struct Node{int el ...

  3. 1、<img />标签

    alt:当图片不显示时的文字说明 title:鼠标悬停在图片上的出现的文字说明

  4. 运行CUDA实例时候出现的问题

    问题一:>LINK : fatal error LNK1123: 转换到 COFF 期间失败:文件无效或损坏 将 项目——项目属性——配置属性——连接器——清单文件——嵌入清单 “是”改为“否” ...

  5. delphi变量作用域

    完全摘自网络(一件飘雪),供参考: 很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开. delphi单元的变量和函数访问权限问题如下两个单元描述: ...

  6. 使用Image.GetThumbnailImage 方法返回缩略图

    如果 Image 包含一个嵌入式缩略图像,则此方法会检索嵌入式缩略图,并将其缩放为所需大小. 如果 Image 不包含嵌入式缩略图像,此方法会通过缩放主图像创建一个缩略图像. 请求的缩略图像大小为 1 ...

  7. MySQL字段联合去重sql

    MySQL字段联合去重sql 例如数据 id,name1,name2 1 a x 2 a y 3 b x 4 a y 5 a x 联合去重name1,name2的结果为 id,name1,name2 ...

  8. LWP::UserAgent介绍3 -> cookie设置

    use LWP::UserAgent; use HTTP::Cookies; my $ua = LWP::UserAgent->new; $ua->cookie_jar(HTTP::Coo ...

  9. 描述符和property内建函数

    首先我们搞清楚__getattr__ ,__get__ 和 __getattribute__ 作用的不同点. __getattr__在授权中会用到. __getattribute__  当要访问属性时 ...

  10. cuckoo数据库变更

    1.cuckoo版本升级 cuckoo默认的数据库为sqlite,默认连接方式为sqlite:///os.path.join(REPORT_ROOT, "db", "cu ...