非旋treap (fhq treap)

非旋treap(fhq treap)是一种不需要旋转操作的数据结构,通过随机权值保持平衡。核心操作包括分裂和合并,用于高效地进行数据操作。基本操作涵盖建新节点、更新、插入、删除、查询排名、查找值的排名、找前驱和后继。适用于解决区间问题和平衡树模板题目。
摘要由CSDN通过智能技术生成

非旋treap ( fhq treap )

学不懂splay,所以学了非旋treap
treap的效率其实和splay差不多

核心操作

fhq treap和treap同样有一个随机分配的rnd值,用于平衡 ( 在不改变性质的情况下,使树的形态趋于随机以保证平衡),但fhq treap不需要旋转操作来维持平衡,因为有两个神奇的操作merge(合并)和split(分裂)

1,分裂(split)

左小右大
1.按权值分裂
效果 :将以某个节点为根的子树分裂为两个新的子树 , 这两个子树的根节点分别为x,y .
其中x为根的子树中所有点的权值均小于等于 v, y为根的子树中的所有点的权值均 大于 v.

操作:
对以now节点为根的子树 :
1.now的权值小于等于v : 将now 与x连接,分裂右子树 (左儿子在此操作中接入了x)
2.now的权值大于v : 将now 与y连接,分裂左子树(右儿子在此操作中接入了y)
(split操作相当于将每个节点与新的左右儿子连接)
更新now
建议结合代码理解

void split(int now,int k,int &x,int &y){
   //注意观察&的用途
	if(!now) x=y=0;//结束
	else
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值