# Poj 2828 Buy Tickets

（其实我也不想的，只是正好刚学splay,就看到一个动态插入的题，就。。。就没忍住Orz

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

#define l ch[0]
#define r ch[1]

struct node{
int val,siz;
node * ch[2];
void maintain(){
siz = 1;
if(l) siz+=l->siz;
if(r) siz+=r->siz;
}
};

int siz(node * o){
if(!o)
return 0;
return o->siz;
}

const int maxn = 212345;

node nodes[maxn];
int tot;

void out(node * rot,int d,int k){
if(rot->r)
out(rot->r,d+1,-1);
for(int i=0;i<d;i++)
printf("  ");
if(k==0)
printf("--");
else{
if(k==-1) printf("/");
else printf("\\");
}
printf("%d ( %d )\n",rot->val,rot->siz);
if(rot->l)
out(rot->l,d+1,1);
}

void print(node * root){
out(root,0,0);
}

node * newnode(int x){
node * ret = &nodes[tot++];
ret->val = x;
ret->siz = 1;
ret->l=ret->r=NULL;
return ret;
}

void zg(node* &o,int d){
node * k = o->ch[d];
o->ch[d]=k->ch[d^1];
k->ch[d^1]=o;
o=k;
o->maintain();
o->ch[d^1]->maintain();
}

int splay(node* &rot,int x){
int p = siz(rot->l)+1;
if(p==x)
return 2;
int d = p > x ? 0 : 1;
if(d) x-=p;
int k = splay(rot->ch[d],x);
if(k==2)
return d;
if(k==d) zg(rot,k);
else zg(rot->ch[d],k);
zg(rot,d);
return 2;
}

void fnd(node* &rot,int x){
int k = splay(rot,x);
if(k!=2)
zg(rot,k);
}

void inser(int val,int lo,node* &root){
node * k = newnode(val);
lo++;
if(lo==1){
fnd(root,1);
root->l = k;
root->maintain();
}
else{
fnd(root,lo-1);
fnd(root,lo);
root->l->r = k;
root->l->maintain();
root->maintain();
}
}

int ans[maxn];
int len;

void mid(node *rot){
if(rot->l)
mid(rot->l);
ans[len++]=rot->val;
if(rot->r)
mid(rot->r);
}

int main(){
int n;
while(~scanf("%d",&n)){
tot = 0;
node *rot = newnode(0);
int x,pos;
for(int i=1;i<=n;i++){
scanf("%d %d",&pos,&x);
//   print(rot);
inser(x,pos,rot);
}
len = 0;
mid(rot);
for(int i=0;i<n;i++)
printf(i<n-1?"%d ":"%d\n",ans[i]);
}
return 0;
}

• 本文已收录于以下专栏：

## poj2828--Buy Tickets(线段树+详解)

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 13618   A...
• u013015642
• 2014年09月23日 20:10
• 1009

## POJ 2828 Buy Tickets 题解&代码

• Rainbow6174
• 2015年12月03日 19:43
• 404

## POJ2828：Buy Tickets(线段树单点)

Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must ge...
• libin56842
• 2013年10月24日 17:01
• 4786

## poj Buy Tickets（线段树）

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 7802   Ac...
• Wiking__acm
• 2012年07月31日 12:43
• 1227

## POJ 2828 - Buy Tickets

• diannaok
• 2012年07月27日 21:03
• 249

## Poj 2828 Buy Tickets

• mr_zys
• 2013年08月17日 17:19
• 423

## poj 2828 - Buy Tickets

Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must ...
• wang2534499
• 2015年08月09日 13:12
• 281

## POJ - 2828 Buy Tickets

Buy Tickets Time Limit: 4000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u...
• qq_18738333
• 2015年03月29日 02:04
• 345

## poj 2828 Buy Tickets

http://poj.org/problem?id=2828
• wangjieyunxia
• 2014年04月19日 20:45
• 333

## Buy Tickets poj 2828

Language: Default Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Su...
• u014422052
• 2014年11月04日 22:53
• 651

举报原因： 您举报文章：Poj 2828 Buy Tickets 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)