算法提升--二叉堆与树状数组

      我很早就想写一篇算法提升的文章了 ,奈何大一的时候, 有点摆烂 ,然后啊 。。。。

我来先写一个比较入门的知识fhq Treap,也称无旋 Treap,中文名:普通平衡树 。重要性就相当于cf里的线段树,可见重要性.(以后我都会先用 算法基础理解和算法逻辑,然后在进阶理解,最后用题目来结束文章)。

      基础理解:

            结合 二叉搜索树 (BST) 堆 (Heap) ,Treap 通过维护两个属性来保证其结构的特性:一个是节点的键值(用来保持二叉搜索树的特性),另一个是节点的优先级(用来保持堆的特性)。这确保了 treap 具有良好的随机性和平均时间复杂度。

     算法逻辑:

  1. 插入:

    • 将新节点插入到适当的位置以维持 BST 的性质。
    • 然后将节点与其父节点比较,若优先级较大,则进行旋转以维持堆的性质。
  2. 删除:

    • 删除节点时,首先定位节点。
    • 若节点有两个子节点,则需要先进行旋转,使其只有一个子节点,再进行删除。
  3. 查找:

    • 与普通二叉搜索树相同,通过比较键值进行查找

重点:

     平衡树上的每个节点放两个值:树的权值val和堆的随机值key,对于val值,维护查找树的性   质,对于key值,维护堆的性质.

样例:

好,以上的基础知识点我推荐大家反复看,点个关注不迷路。

讲这么多,代码怎么写呢? 

我先写分布在用样例全写:
 

其实 写完这个板子 我们就无形中解决了洛谷的一道题目 ,而且还是到蓝题,请大家不看我的样板,自行解决题目【模板】普通平衡树 - 洛谷

言归正传:

大家耐心5分钟,看题目黑匣子 - 洛谷。 

大家注意到 这里的推荐算法还多了一个线段树(貌似还是进阶版--主席树),好 这个是cf上蓝名的重要章节,我明后天会发表一篇,来带大家理解掌握。

这里本章节的fhq的treap就结束了,顺便说一下,这个代码有持久性,会了这个就本其他的就可以不学了,之后我刷到有splay的话,我再出一个章节。如果大家有啥问题可以搜我的洛谷名看我的源代码。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值