c++ 平衡树
平衡树的性质
它其实就是一个 BST(Binary Search Tree 二叉搜索树)。
当然,不同的平衡树会有自己的特性
BST 的性质
只有一个:任意一个节点的左子树的所有节点都比它的优先级高,右子树的所有节点都比他的优先级低。
注意:一个节点也可以当成一颗子树
如下:
Why 平衡树?
看到这里你也许会想:既然平衡树就是一颗 BST ,那还要它干嘛?
看这里:
由于 BST 可能会退化成一条链,使得原本 \(O(log n)\) 的速度退化成 \(O(n)\)
于是,大佬们发明了各种各样的平衡树,避免 BST 退化成一条链
平衡树的分类
\left\{
\begin{array}{**lr**}
\text{旋转平衡树}
\left\{
\begin{array}{**lr**}
\text{Splay} & \\
\text{Treap}
\end{array}
\right. & \\
\text{非旋平衡树}
\left\{
\begin{array}{**lr**}
\text{FHQ Treap} & \\
\text{替罪羊树}
\end{array}
\right.
\end{array}
\right.
\]
当然这里只是最常用的
还有更多的平衡树等待着你去学习、发明
平衡树的效率
操作 | 时间复杂度 |
---|---|
插入元素 | \(O(log n)\) |
弹出元素 | \(O(log n)\) |
查询排名 | \(O(log n)\) |
查询第 K 大 | \(O(log n)\) |
查询前驱 | \(O(log n)\) |
查询后继 | \(O(log n)\) |
当然这些是基础功能,还有更多的以后会学到 |
平衡树的解析
FHQ Treap
这是一个最适合新手学习的
包含区间反转、可持久化
FHQ Treap
Splay
这个也是必须要掌握的
包含区间反转、 LCT
Splay
The End
c++ 平衡树的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- [普通平衡树treap]【学习笔记】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9046 Solved: 3840[Submit][Sta ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- 【Splay】bzoj3223-Tyvj1729文艺平衡树
一.题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 ...
- hiho #1329 : 平衡树·Splay
#1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...
- bzoj 3196: Tyvj 1730 二逼平衡树
#include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...
- 【线段树套平衡树】【pb_ds】bzoj3196 Tyvj 1730 二逼平衡树
线段树套pb_ds里的平衡树,在洛谷OJ上测试,后三个测试点TLE #include<cstdio> #include<algorithm> #include<ext/p ...
随机推荐
- js 图片上传给后台的3种格式
1. file格式 (创建formData来完成file上传) 我们的接口需求: 代码: <input type="file" id="imgfile" ...
- vue中Promise对象用法
Promise.all([ 需要异步一起执行的方法---------先做的事 ]).then(res=>{ 后做的事(先做的事已经做好了) }) 举栗子: Promise.all([ this. ...
- window.history.go(-1);后退不刷新问题 移动端
在后退的界面上添加 判断是否是返回window.addEventListener('pageshow', function (e) { if(e.persisted || (window.per ...
- centos7 安装樱桃树cherrytree
樱桃树对于做笔记或者编程来说都是很好的工具.以前再网上找了很久还是稿不懂cherrytree的方法.后来才发现,其实根本就不用那么麻烦.直接在epel源里面安装句可以了. 下面说下安装步骤: 第一步: ...
- Python 连接Mysql数据库执行语句操作
学习Mysql模块的使用,模块命名的坑,解决SHA加密错误无法连接
- jsp第七周作业
1.p78-p79的例4-9 <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- python基础练习题(输入三个整数x,y,z,请把这三个数由小到大输出)
day3 --------------------------------------------------------------- 实例005:三数排序 题目: 输入三个整数x,y,z,请把这三 ...
- XCTF练习题---MISC---Janos-the-Ripper
XCTF练习题---MISC---János-the-Ripper flag:flag{ev3n::y0u::bru7us?!} 解题步骤: 1.观察题目,下载附件 2.发现是压缩包,进行解压,是一个 ...
- 【译】defer-panic-and-recover
Go 有通用的控制流程:if,for,switch,goto.它也有go语句用于让代码运行在单独的协程.这里我将讨论一些不常见的问题:defer,panic 和 recover. defer语句将函数 ...
- Apollo的docker配置详解步骤
Apollo 的docker配置 基础环境 centOS7 + Docker服务 + mysql服务 1. 下载Apollo的包 git clone https://github.com/ctripc ...