码迷,mamicode.com
首页 > 其他好文 > 详细

Tyvj 1729 文艺平衡树

时间:2017-10-06 15:03:57      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:sam   wap   color   upd   root   desc   code   out   section   

您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 

Input

第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n)  m表示翻转操作次数
接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n 

Output

输出一行n个数字,表示原始序列经过m次变换后的结果 

Sample Input

5 3

1 3

1 3

1 4

Sample Output

4 3 2 1 5

HINT

N,M<=100000

同样是非旋treap

与splay做这道题的思路一样,交换左右子节点

 1   if (x->r) x->size+=x->r->size;
 2 }
 3 Treap* rever(Treap* x)
 4 {
 5   if (!x) return 0;
 6   swap(x->l,x->r);
 7   x->rev^=1;
 8   return x;
 9 }
10 void pushdown(Treap* x)
11 {
12   if (x->rev)
13     {
14       rever(x->l);
15       rever(x->r);
16       x->rev=0;
17     }
18 }
19 Treap *merge(Treap *A,Treap *B)
20 {
21   if (!A) return B;
22   if (!B) return A;
23   if (A->lev<B->lev)
24     {
25       pushdown(A);
26       A->r=merge(A->r,B);
27       updata(A);
28       return A;
29     }
30   else 
31     {
32       pushdown(B);
33       B->l=merge(A,B->l);
34       updata(B);
35       return B;
36     }
37 }
38 Droot split(Treap *x,int k)
39 {
40   if (!x) return Droot(0,0);
41   Droot y;
42   pushdown(x);
43   if (getsize(x->l)>=k)
44     {
45       y=split(x->l,k);
46       x->l=y.second;
47       updata(x);
48       y.second=x;
49     }
50   else 
51     {
52       y=split(x->r,k-getsize(x->l)-1);
53       x->r=y.first;
54       updata(x);
55       y.first=x;
56     }
57   return y;
58 }
59 void reverse(int l,int r)
60 {
61   Droot x=split(root,l-1);
62   Droot y=split(x.second,r-l+1);
63   root=merge(merge(x.first,rever(y.first)),y.second);
64 }
65 int main()
66 {int opt,x,q,i,l,r;
67   cin>>n>>q;
68   Treap* rt;
69   for (i=1;i<=n;i++)
70   NewNode(rt,i),root=merge(root,rt);
71   while (q--)
72     {
73       scanf("%d%d",&l,&r);
74       reverse(l,r);
75     }
76   for (i=1;i<=n;i++)
77     {
78       Droot y=split(root,1);
79       printf("%d ",y.first->val);
80       root=y.second;
81     }
82 }

 

Tyvj 1729 文艺平衡树

标签:sam   wap   color   upd   root   desc   code   out   section   

原文地址:http://www.cnblogs.com/Y-E-T-I/p/7631541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!