treap——operator_

1. t r e a p treap treap 的性质

t r e a p = t r e e + h e a p ? treap=tree+heap? treap=tree+heap?

t r e a p treap treap 是一种思路简单,码量较小的(弱)平衡树。

对于每个要维护的值 a a a ,我们再取一个值 b b b ,让 a a a 满足 二叉搜索树 的性质 , b b b 满足 的性质 ,易知这是一棵 笛卡尔树 ,我们让 b b b 取随机数,那么它的形态近乎平衡。

性质嘛,就是二叉搜索树的所有性质它都满足,它只不过是让二叉树的形态平衡一点而已。

2.旋转 t r e a p treap treap

基本操作:旋转

在二叉搜索树插入与删除的过程中,经常会改变树的形态,我们就需要一种操作来维护 t r e a p treap treap 的性质,在旋转 t r e a p treap treap 中,这种操作就是左旋和右旋。

以左旋为例,我们在某一操作结束后发现根节点的右儿子 B B B b b b 比根节点 A A A b b b 小,那么为了维护堆性质我们要把右儿子变成根节点,但这样会破坏二叉搜索树性质,所以我们要把 B B B 的左儿子接到 A A A 的右儿子上,如下图。

右旋就同理了。

void pushup(int x) {s[x]=s[l[x]]+s[r[x]]+w[x];}
void lrotate(int &k) {
    int t=r[k];
    r[k]=l[t],l[t]=k,s[t]=s[k],pushup(k),k=t;
}
void rrotate(int &k) {
    int t=l[k];
    l[k]=r[t],r[t]=k,s[t]=s[k],pushup(k),k=t;
}

其他操作

t r e a p treap treap 可以实现 插入、删除、排名数值互查、前驱后继互查 ,具体代码与二叉搜索树差不多,可以去 operator_的模板综合(动态更新) 里查看。

3.非旋 t r e a p treap treap

等待更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值