高级数据结构-平衡树
Mollnn
这个作者很懒,什么都没留下…
展开
-
数据结构Note:伸展树(Splay Tree)
基本思想: 每个节点被访问时,使用旋转操作将其移动到根。 旋转是自底向上的,因此需要设置父亲指针核心操作:伸展Splay(x)保持伸展树有序性的前提下,将元素x调整到树的根部单次双旋,分若干种情况讨论!p->father x==y->left Zig(x) x==y->right Zag(x) p->father (令p=x->father) x==p->left p==p->father-原创 2017-06-06 20:05:51 · 431 阅读 · 0 评论 -
[洛谷P2073] 送花 - 平衡树入门题
可以作为入门平衡树的第一道题。1 试题大意维护一个序列,支持以下操作: 插入一个新的元素,包括它的Key和Value 删除Key最小的元素 删除Key最大的元素 并在结束时分别输出序列中元素的Key总和与Value总和。2 分析平衡树这里用Splay实现。对于删除操作,由于在两端,实现起来较为简单。3 参考程序#include <cstdio> #define lc(x) ((x)原创 2017-07-29 23:52:15 · 551 阅读 · 0 评论 -
[BZOJ1012] [JSOI2008] 最大数
BZOJ1012 = Luogu 1198 Tag: 线段树入门题试题描述 维护一个序列,支持以下操作: 查询某位xx个数中的最大值 向序列末尾插入一个数nn,且nn 为本次插入命令指定的常数CC与上一次询问结果的和对一个确定常数DD取模。 一共有MM个操作,满足M≤200000M\leq200000。分析 考虑用线段树维护。开始时创建一个大序列,全部设为−2147483647-2147483原创 2017-07-30 15:33:32 · 367 阅读 · 0 评论 -
Splay模板
第二代Splay魔板。#include <cstdio> #include <cstring> #include <iostream> using namespace std; int fa[100005],ch[100005][2],cnt[100005],size[100005],k[100005],m,ind=0,root=0; void update(int p){ size[0]=原创 2017-08-18 22:15:37 · 461 阅读 · 0 评论 -
[Tyvj1728] 普通平衡树 - Splay模板
第三次A这题了,代码终于像点样子。#include<cstdio> #define Ms 100005 using namespace std; int fa[Ms],ch[Ms][2],cnt[Ms],size[Ms],k[Ms],ind=0,root=0,m; void debug(int p); void update(int p){ size[p]=size[ch[p][0]]+si原创 2017-08-19 23:07:13 · 321 阅读 · 0 评论 -
[LG1503] 鬼子进村 - 平衡树
考虑维护每个被摧毁的点,摧毁时入栈,修复时弹出栈并在平衡树中删除之。对于询问,求前驱后继之差即可,注意询问点为已存在的特判。#include<cstdio> #include<vector> using namespace std; int fa[50005]={},ch[50005][2]={},k[50005]={},ind=0,root=0,m,n; int search(int v){int原创 2017-08-20 23:25:21 · 445 阅读 · 0 评论 -
[ZJOI2006] 书架 - 平衡树
要求维护一个序列(序列中的每个元素都有一个编号,终生不变),可以指定某个元素并将其放到序列开头、序列结尾,或与其前驱或后继交换位置。支持询问某个编号的元素位置和某个位置的元素编号。用平衡树来实现此题,需要特殊考虑的就是编号问题。由于平衡树中要完成终生不变的编号,还有循编号来查找元素,直接建立tag并不能有效地解决问题。不妨利用平衡树内部的Key来维护位置关系,然后外部开两个数组来双向地记录Key与N原创 2017-08-24 22:13:12 · 452 阅读 · 0 评论 -
[NOI2004] 郁闷的出纳员 - 平衡树
《郁闷的出纳员》此题曾一度令人十分郁闷,原因是全局标记的转化容易出错。 可以将数值视作一维系量,则有r=r0+r′r=r_0+r',其中rr为真实工资,r0r_0为系工资,r′r'为相对工资。平衡树中储存的便是r′ir'_i,另建立一个全局标记r0r_0,则工资加减可视作对它的操作。但此时,出入平衡树的参量都需经过关于r0r_0的运算。这是一个需要细心与耐心的过程。 // 平衡树中记录相对工原创 2017-08-22 23:52:24 · 398 阅读 · 0 评论 -
Splay模板 - v2.1
蒟蒻成功达成一次性AC模板,在此纪念。#include<cstdio> using namespace std; int fa[100005],ch[100005][2],k[100005],size[100005],cnt[100005],m,ind=0,root=0; void update(int p){ size[p]=size[ch[p][0]]+size[ch[p][1]]+cn原创 2017-08-24 15:46:39 · 349 阅读 · 0 评论