tyvj1728 普通平衡树】的更多相关文章

为了彻底理解树状数组,试着用树状数组做了下普通平衡树 而树状数组只能离线做,或者保证值的大小在数组可承受的范围内也是可以的,因为要求离线是因为必须事前对所有数离散化. 然后我们看刘汝佳蓝书上的图 利用如下代码,可以找到所有前缀和中第一个大于等于k的 int kth(int k) { ; ;i>=; --i) { ans += <<i; <<i; else k-=C[ans]; } ]; } 什么原理呢,我们这么理解,把树状数组看成一棵树,事实上他的节点编号的中序遍历是有序的,…
http://www.lydsy.com/JudgeOnline/problem.php?id=3224 (题目链接) 题意 1. 插入x数:2. 删除x数(若有多个相同的数,因只删除一个):3. 查询x数的排名(若有多个相同的数,因输出最小的排名):4. 查询排名为x的数:5. 求x的前驱(前驱定义为小于x,且最大的数):6. 求x的后继(后继定义为大于x,且最小的数) Solution treap板子.右转光勋总结→_→:平衡树 细节 一个节点还统计了这个数出现了几次,然后询问排名前驱后继什…
真是太差了,到现在才打出一个平衡树的板子.. 感谢blackjack大佬提供的数组版treap板子!!基本完全照搬,blackjack太神啦! 但目前我只会这几个最基本的操作(说白了STL的(multi)set)也能干... 还差的好远-_- #include<bits/stdc++.h> #define L T[x].ls #define R T[x].rs using namespace std; ; int root,sz,ans; struct Node{ int val,sz,cnt…
SBT(Size Balance Tree), 即一种通过子树大小(size)保持平衡的BST SBT的基本性质是:每个节点的size大小必须大于等于其兄弟的儿子的size大小: 当我们插入或者删除一个节点之后,SBT的性质会有所改变,此时需要函数maintain(mt)来维持平衡 mt(T)用于修复以T为根的子树的SBT 调用mt(T)的前提是T的子树都已经是SBT了 {由于左右对称,这里只讨论关于上图第一个不等式不成立的例子} 情形1:size[A] > size[R] 此时只需继续mt(A…
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3224 平衡树入门题,学习学习. splay(学习yyb巨佬) #include<bits/stdc++.h> using namespace std; typedef long long ll; ; const int INF = 1e9; inline void read(int &n) { register , t = ; register char ch = getch…
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数,因输出最小的排名) 4. 查询排名为x的数 5. 求x的前驱(前驱定义为小于x,且最大的数) 6. 求x的后继(后继定义为大于x,且最小的数) Input 第一行为n,表示操作的个数,下面n行每行有两个数opt和x,opt表示操作的序号(1<=opt<=6) Output 对于操作3,4,…
本篇博客有详细题解,浅谈算法--splay…
一.斜堆 斜堆是一种可以合并的堆 节点信息: struct Node { int v; Node *ch[]; }; 主要利用merge函数 Node *merge(Node *x, Node *y) { if(!x) return y; if(!y) return x; if(x->v < y->v) swap(x, y); x->ch[] = merge(x->ch[], y); ], x->ch[]), x; } 左偏树需要维护一个额外的信息,而斜堆每次强制swa…
Problem 普通平衡树 Solution 本题是裸的二叉平衡树.有很多种方法可以实现.这里打的是替罪羊树模板. 此题极其恶心. 前驱后继模块需要利用到rank模块来换一种思路求. 很多细节的地方容易炸.我拿数据调了很久才A. (delt()删除模块其实是不需要重建的,不影响时间复杂度) 替罪羊树具体详见此篇知乎:替罪羊树 AC Code #include "iostream" #include "cstdio" #define alpha 0.7 using n…
最近开始学习平衡树,在学长的强烈推荐下学习了AVL.红黑树.splay(以上我都还没学)treap. 首先讲一下个人对treap(树堆)的理解. treap,顾名思义,就是tree+heap,首先因为treap是一棵平衡树,因此它满足二叉排序树的性质,接下来,为了防止BST退化成一条链,它使用了随机化的方式给每个点分布一个优先级,然后要求优先级满足堆的性质,但不必是一棵完全二叉树,这样的效率期望就是每次基础操作\( \log n \)的. 然后简单讲一下树堆的基础操作,代码参见例题与AC代码.…