[转]Splay算法】的更多相关文章

前言 今天不容易有一天的自由学习时间,当然要用来"学习".在此记录一下今天学到的最基础的平衡树. 定义 平衡树是二叉搜索树和堆合并构成的数据结构,它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树. 这里仅仅说明一下平衡树中的\(Splay\)算法 进入正题 平衡树中有许多种类:红黑树.\(AVL\)树,伸展树,\(Treap\)等等,但是\(Splay\)算法算是可用性很强的一种了.也就是说比较稳定. 在\(Splay\)算法中,一个处处都要…
首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角. 先看一道题目: skydec有n个数,每次他都会把一些数放进一些盒子里,由于skydec太傻×,所以他不能判断数的大小,现在他请求你帮他求盒子里的第K小数 输入:一个数n表示数的个数,一个数m表示操作的个数 (n<=m<=100000) 操作由2部分组成,简称为a和b,如果a=0,则表示将b放进盒子里,如果a=1,则表示询问盒子里的第b小数 输出:对于每次询问输出答案 由于是临时造的题目,就不造样例了,引用一句RZZ大…
先介绍变量定义 int n; struct Node { //Splay节点定义 ],val,num,siz; //fa:它爸爸:son它儿子,左0右1:val:这个节点的值 //num:这个值的数量:siz:以它为根的子树的大小 void res() { //重置节点,用于删除 fa=son[]=son[]=val=num=siz=; } } tree[N]; int ins; int root; int mem[N],inm; //内存回收池(其实并没有什么用) var 判断一个节点是它爸爸…
到这里 \(A\) 了这题, \(Splay\) 就能算入好门了吧. 今天是个特殊的日子, \(NOI\) 出成绩, 大佬 \(Cu\) 不敢相信这一切这么快, 一下子机房就只剩我和 \(zrs\) 了. 忽然回想起之前大佬的一幕幕, 有一丝惆怅 真的不知道该怎么安慰dalao... 不过上天不会忽视那些默默努力的人的对吧 不想被说做作, 但是如果dalao能看到这篇博客的话, 大佬, 高考加油啊 为什么在这里写这些呢? \(Splay\) 其实是大佬领进门的, 学习的也是大佬的板子, 大佬很久…
题目描述 网址:https://www.luogu.org/problemnew/show/3721 大意: 有一颗单旋Splay(Spaly),以key值为优先度,总共有5个操作. [1] 插入一个节点,需返还插入后此节点的深度. [2] 把最小点单旋到根,需要返还旋转前此点深度. [3] 把最大点单旋到根,需要返还旋转前此点深度. [4] 把最小点单旋到根,然后删除根,需要返还旋转前此点深度. [5] 把最大点单旋到根,然后删除根,需要返还旋转前此点深度. 总共有M个操作,数据范围:M <=…
前言 splay学了已经很久了,只不过一直没有总结,鸽了好久来写一篇总结. 先介绍 splay:亦称伸展树,为二叉搜索树的一种,部分操作能在 \(O( \log n)\) 内完成,如插入.查找.删除.查询序列第 \(k\) 大.查询前缀(比查询的数小的数中最大的数).查询后缀(比查询的数大的数中最小的数)等操作,甚至能够实现区间平移.它由 Daniel Sleator 和 Robert Endre Tarjan 在1985年发明的.注:时间复杂度是均摊为 \(O(\log n)\) ,是经过严谨…
实现功能:同splay区间反转 1(基于BZOJ3223 文艺平衡树) 这次改用了一个全新的模板(HansBug:琢磨了我大半天啊有木有),大大简化了程序,同时对于splay的功能也有所完善 这里面没有像一般二叉排序树那样子用一个参量进行排序,而是直接以中序遍历来构建了一个普通的二叉树(当然也可以把每个点的中序遍历排名视作参量),然后插入的时候就是指定位置插入(这个就比较像是文本插入了) 总之得到了较大的提升,代码优美程度也提高不少 var i,j,k,l,m,n,head,tot,ll:lon…
实现的功能:将序列区间反转,并维护 详见BZOJ3223 var i,j,k,l,m,n,head,a1,a2:longint; s1:ansistring; a,b,c,d,fat,lef,rig:..] of longint; procedure swap(var x,y:longint);inline; var z:longint; begin z:=x;x:=y;y:=z; end; procedure ext(x:longint);inline; begin ) then exit;…
Splay 参考:https://tiger0132.blog.luogu.org/slay-notes 普通模板: ; ], val[N], cnt[N], fa[N], sz[N], lazy[N], ncnt = , rt = ; int n, m; inline int ck(int x) { ] == x; } inline void push_up(int x) { sz[x] = sz[ch[x][]] + sz[ch[x][]] + cnt[x]; } ///区间反转 inlin…
于是乎,在丧心病狂的noip2017结束之后,我们很快就要迎来更加丧心病狂的省选了-_-|| 所以从写完上一篇博客开始到现在我一直深陷数据结构和网络流的漩涡不能自拔 今天终于想起来写博客(只是懒吧......) 言归正传. 省选级别的数据结构比NOIP要高到不知道哪里去了. noip只考一点线段树啊st表啊并查集啊之类的简单数据结构,而且应用范围很窄 但是省选里面对数据结构,尤其是高级数据结构的要求就高了很多,更有一些题目看着就是数据结构题,也没有别的做法. 因此掌握高级数据结构就成了准备省选的…