很多年前学的splay已经忘了?

BZOJ 3729 要用Splay啊哭。。强制在线。。


二叉查找树

  二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。

  

  二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
  (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
  (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
  (3)左、右子树也分别为二叉排序树;
 
  二叉查找树的优化: Size Balanced Tree(SBT)  、 AVL树  、红黑树 、Treap(Tree+Heap) 。。。。

            这些均可以使查找树的高度为O(log(n))
 
伸展树

  伸展树是二叉查找树的一种改进,与二叉查找树一样,伸展树也具有有序性。
  即伸展树中的每一个节点x都满足:该节点左子树中的每一个元素都小于x,而其右子树中的每一个元素都大于x。

  与普通二叉查找树不同的是,伸展树可以自我调整,这就要依靠伸展操作Splay(x,S)。

旋转

1.zig :

              当目标节点为根节点的左/右节点时,进行单旋转。

2.zig-zag:

                当目标节点与父节点和祖父节点构成zig-zag时,进行双旋转。

3.zig-zig:

                  当目标节点有父节点和祖父节点构成zig-zig时,进行一次zig-zig操作。

单旋转操作效果(以右单旋转为例):

  

双旋转操作效果:

Zig-zig操作效果:

在Splay tree中,zig-zig操作基本上代替的AVL tree 中的单旋转。

伸展树的基本操作
利用Splay操作,我们可以在伸展树S上进行如下运算:

(1)Find(x,S):判断元素x是否在伸展树S表示的有序集中。
首先,与在二叉查找树中的查找操作一样,在伸展树中查找元素x。如果x
在树中,则再执行Splay(x,S)调整伸展树。

(2)Insert(x,S):将元素x插入伸展树S表示的有序集中。
首先,也与处理普通的二叉查找树一样,将x 插入到伸展树S中的相应位置
上,再执行Splay(x,S)。

(3)Delete(x,S):将元素x从伸展树S所表示的有序集中删除。
首先,用在二叉查找树中查找元素的方法找到x的位置。如果x没有孩子或
只有一个孩子,那么直接将x删去,并通过Splay操作,将x节点的父节点调整
到伸展树的根节点处。否则,则向下查找x的后继y,用y替代x的位置,最后
执行Splay(y,S),将y调整为伸展树的根。

(4)Join(S1,S2):将两个伸展树S1与S2合并成为一个伸展树。其中S1的所
有元素都小于S2的所有元素。
首先,我们找到伸展树S1 中最大的一个元素x,再通过Splay(x,S1)将x 调
整到伸展树S1 的根。然后再将S2 作为x 节点的右子树。这样,就得到了新的
伸展树S。如图所示

(5)Split(x,S):以x 为界,将伸展树S 分离为两棵伸展树S1 和S2,其中S1
中所有元素都小于x,S2中的所有元素都大于x。
首先执行Find(x,S),将元素x 调整为伸展树的根节点,则x 的左子树就是
S1,而右子树为S2。如图所示

除了上面介绍的五种基本操作,伸展树还支持求最大值、求最小值、求前趋、
求后继等多种操作,这些基本操作也都是建立在伸展操作的基础上的。

Splay模板题

[BZOJ3223] Tyvj 1729 文艺平衡树 关于翻转标记 
[BZOJ3224] Tyvj 1728 普通平衡树平衡树基本操作 
[BZOJ1503] [NOI2004]郁闷的出纳员带+-标记的平衡树 
[BZOJ1208] [HNOI2004]宠物收养所 
[BZOJ1251] 序列终结者注意标记下放的过程

 
 

【Splay 总结】的更多相关文章

  1. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  2. [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)

    Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:   文本:由0个或 ...

  3. splay最终模板

    来自wjmzbmr的splay模板 #include<cstdio> #include<iostream> #include<algorithm> using na ...

  4. bzoj 3506 && bzoj 1552 splay

    查最小值,删除,翻转... 显然splay啊... #include<iostream> #include<cstdio> #include<algorithm> ...

  5. 【splay】文艺平衡树 BZOJ 3223

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

  6. 【填坑】bzoj3224 splay裸题

    人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...

  7. BZOJ 1014: [JSOI2008]火星人prefix [splay 二分+hash] 【未完】

    1014: [JSOI2008]火星人prefix Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6243  Solved: 2007[Submit] ...

  8. BZOJ1500: [NOI2005]维修数列[splay ***]

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 12278  Solved: 3880[Submit][Statu ...

  9. HDU1890 Robotic Sort[splay 序列]

    Robotic Sort Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  10. BZOJ3223: Tyvj 1729 文艺平衡树 [splay]

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3595  Solved: 2029[Submit][Sta ...

随机推荐

  1. 计算1到N中各个数字出现的次数 --数位DP

    题意:给定一个数n,问从1到n中,0~9这10个数字分别出现了多少次.比如366这个数,3出现了1次,6出现了2次. 题解:<剑指offer>P174:<编程之美>P132 都 ...

  2. scandir函数的研究【笔记】

    以下是本人的学习笔记,代码并非原创,均摘自官方源码,贴出来仅供学习记录用 scandir 的使用要注意内存泄漏的问题 scandir函数实现: vi ./uClibc-0.9.33.2/libc/mi ...

  3. Linux 删除文件后空间不释放【原创】

    删除MySQL备份文件后,查找文件所在目录发现文件已经备删除了,但是空间没有释放,还是83% 解决方法: lsof|grep -i delete 发现进程还在,杀掉进程 kill -9 5377 再次 ...

  4. 码源中国.gitignore忽略文件配置

    码源中国.gitignore忽略文件配置 ## Ignore Visual Studio temporary files, build results, and ## files generated ...

  5. Django项目上传到AWS服务器上

    EC2是亚马逊(Amazon.com)提供的弹性云计算服务:Apache是一个跨平台的Web服务器端软件,可以使Python.PHP.Perl等语言编写的程序运行在服务器上:Django是一个Web程 ...

  6. 轻量级运维工具-pssh,pscp,prsync,pslurp,pnuke

    批量执行,并行传输,远程killall #yum安装 yum install pssh -y #yun安装后pscp改名为pscp.pssh #源码编译 wget https://pypi.pytho ...

  7. PHP取整函数ceil,floor,round,intval的区别

    ceil — 进一法取整 float ceil ( float $value ) 返回不小于 value 的下一个整数,value 如果有小数部分则进一位.ceil() 返回的类型仍然是 float, ...

  8. 模块定义文件.def

    一作用 DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明:另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供 ...

  9. Codeforces Round #423 Div. 2 C-String Reconstruction(思维)

    题目大意:告诉你n个字符串以及这些字符串在字符串s中出现的位置(x1,x2.....xn),要求在满足上述条件的情况下,求出字典序最小的字符串s. 解题思路:主要问题是,如果直接模拟是会超时的,比如v ...

  10. [Ext JS 4] MVC 应用程序框架

    前言 大型客户端应用程序总是很难编写,很难组织和很难维护.随着功能的增加和更多的开发人员加入项目,对项目的控制也越来越困难了.Ext JS 4 提供了一个新的应用程序框架帮助组织代码. 模型 - 一组 ...