- 2025-01-12FHQ-Treap
简介基于分裂与合并的Treap。操作split按权值分裂:inlinevoidsplit(intp,intk,int&x,int&y){//p表示当前分裂树的根节点,x,y表示分裂成的两棵树的根节点,k为关键字 if(!p)returnx=y=0,void(); if(val[p]<=k){ x=p; split(rs[p],k,rs[p],y
- 2024-12-30FHQ-Treap
\(FHQ-Treap\)是无旋平衡树的一种,码量相对少,并且简单易懂。一下简称\(treap\)(注意还有别的\(treap\),但是在本文中仅指\(FHQ-Treap\))。\(treap\)仅需要合并和分裂。\(treap\)结合了小根堆(父亲节点权值比儿子小)和二叉查找树(左子树的值比根小,右子树的值比根大)的特性。
- 2024-12-29学习笔记:旋转treap
前言更好的阅读体验。无旋treap。默认读者会BST的基本操作、堆和旋转。本文旋转部分和上面那篇文章的相同。代码中是小根堆。思想treap既是一棵二叉查找树(tree),也是一个二叉堆(heap)。但是如果这两个数据结构用同一个权值维护,那么这两种数据结构是矛盾的。所以treap用
- 2024-12-29浅析FHQ-treap
前言更好的阅读体验默认读者会BST的基本操作。节点定义替罪羊树采用了懒惰删除的方法,不会立即删除某个点,而是在重构时不放进数组。structnode{intch[2],val;intsiz1,siz2,cnt,sum;//扣去懒惰删除的节点数量,没扣去懒惰删除的节点数量,树内相同权
- 2024-12-20笛卡尔树 (附洛谷模板题代码)
前言打了一场\(\rm{codeforces}\),其中F使用了笛卡尔树,看起来这个东西的优先级比矩快还高,那就学一下似乎这道题并没有使用很多笛卡尔树的性质,但是\(\rm{yishu2}\)开了个专题,这下不得不学了笛卡尔树之前预习的时候看了一下首先复习一下二叉查找树的性质每个
- 2024-12-19FHQ-treap 学习笔记
FHQ-Treap学习笔记範浩強之木,無旋之奇構,併合眸,妙用無窮;其當官也,避繁複之旋。其視心有二,分若離,合若聚,若星漢分合變幻,肖無跡矣。不用旋,巧避繁,古之所未有,今之所獨異。茲樹形奇,如天成,真算之妙。---------《算枢奇构》###基本操作众所周知,无旋treap不需要旋转,基本操作有两个,分
- 2024-12-17FHQ- Treap学习笔记
FHQ-Treap与Treap都保证在第一关键字有序的情况下,维护第二关键字以达到平衡的目的。但是Treap用的是旋转,FHQ-Treap用的是分裂和合并。FHQ-Treap与Treap不同的地方:优美的分裂和合并。非旋。支持区间修改FHQ-Treap与Treap相同的地方:都保证在第一关键字有序的情况
- 2024-11-27笔记:FHQ Treap 之三分裂
小知识点,但是好像没什么人写,所以写一篇。在NOIP之前积攒一点rp。需要的知识平衡树(FHQTreap)前言一般在写FHQTreap的时候,都是按照某个值或排名\(k\),将Treap分成小于等于和大于\(k\)的两棵树,我们将其称为二分裂。那么,所谓三分裂,就是将Treap按照小于、等于、大于
- 2024-11-25FHQ-treap模板
可以再加一个struct把整个树封装起来。。跟oiwiki学的#include<bits/stdc++.h>usingnamespacestd;#include<bits/stdc++.h>usingnamespacestd;structNode{Node*ch[2];intval,prio,cnt,siz;Node(int_val):val(_val),cnt(1),siz(1){
- 2024-10-09Treap学习笔记
Treap(树堆)学习笔记(此处为带旋Treap)Treap简介Treap是一种二叉搜索树,其中,权值val满足二叉搜索树的性质,节点优先级priority满足堆的性质(作用后面会讲到)Treap适用情况因为属于二叉搜索树,所以可以维护二叉搜索树的信息,带旋Treap可以更好地控制树的深度,使得每次操作不至于被
- 2024-07-29「FHQ-Treap —— 码量最小的平衡树」学习笔记
不同于普通Treap,FHQ-Treap不需要左旋和右旋操作来处理数据。因此FHQ-Treap也称作无旋Treap。FHQ-Treap是基于Split(分裂)和Merge(合并)两种操作的平衡树。其与普通Treap的原理完全不同。一些基础的操作:例如Insert(插入元素)和Delete(删除元素)。对于Insert(插入元素),新建一
- 2024-07-25浅谈平衡树
平衡树,是一种数据结构,可以实现一类元素在线性结构中动态变化,基于二叉搜索树,满足二叉搜索树的所有性质。二叉搜索树(BST)二叉搜索树是一种二叉树形结构,它满足以下性质:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二
- 2024-07-14怎么优雅的踩爆 Treap
在发布了文章Treap学习笔记后我认为我的平衡树能力已经登峰造极了。但是Treap真tmd太难写了,所以我们的czy大佬开发除了一种可以优雅的踩爆Treap的绝佳方案。#include<bits/stdc++.h>usingnamespacestd;intn;structtree{ vector<int>v; voidadd(intx){v.in
- 2024-07-08FHQ_Treap
先记个板子#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+5;intn;intrt,son[N][2],sz[N],va[N],pri[N],tot;structFHQ{ voidpushup(intx){sz[x]=sz[son[x][0]]+sz[son[x][1]]+1;} intmerge(intx,inty) { if(!x||!y)returnx|y; if
- 2024-07-05FHQ treap(再见splay------)
但凡打过平衡树的应该都知道\(\huge{二逼平衡树}\)这道题,抄了两个小时的splay版题解,然后发现了\(\color{maroon}FHQtreap\):$\large\color{green}这是splay$structjjtree{ inlinevoidup(rintx){sz[x]=sz[son[x][0]]+sz[son[x][1]]+cnt[x];} inlineboolso(rintx){retu
- 2024-07-02平衡樹專題Treap
前言:题单在此:HL平衡树0701-题单-洛谷|计算机科学教育新生态(luogu.com.cn)平衡树什么是平衡树?首先我们需要知道二叉查找树的内容。二叉查找树(BST:BinarySearchTree)首先,他是一棵二叉树其次,他的左子树的权值<根节点的权值<右子树的权值最后,也是最重要的,他的中序遍历
- 2024-06-16算法课程笔记——FHQ-Treap(无旋)
算法课程笔记——FHQ-Treap(无旋)
- 2024-05-25平衡树 Treap & Splay [学习笔记]
平衡树\(\tt{Treap}\)&\(\tt{Splay}\)壹.单旋\(\tt{Treap}\)首先了解\(\tt{BST}\)非常好用的东西,但是数据可以把它卡成一条链\(\dots\)于是,我们将\(\tt{Tree}\)与\(\tt{heap}\)(堆)合并,以保证平衡树\(\log\)的深度。具体地,我们可以使用旋转操作实现K8He的图
- 2024-05-23平衡树 Treap & Splay [学习笔记]
平衡树\(\tt{Treap}\)&\(\tt{Splay}\)壹.单旋\(\tt{Treap}\)首先了解\(\tt{BST}\)非常好用的东西,但是数据可以把它卡成一条链\(\dots\)于是,我们将\(\tt{Tree}\)与\(\tt{heap}\)(堆)合并,以保证平衡树\(\log\)的深度。具体地,我们可以使用旋转操作实现K8He的图