【学习笔记】用算法题介绍C++的pb_ds库中的可并堆

本文介绍了C++的pb_ds库中的可并堆,通过一道HDUOJ 1512算法题阐述其使用动机和效率,并与并查集进行比较。文章详细讲解了如何在pb_ds中声明和使用可并堆,以及不同实现方式的效率对比。
摘要由CSDN通过智能技术生成

写在前面

来自TRiddle,转载请注明出处,谢谢~

(最后一次更新: 2017/5/3

最近我在网上搜题解的时候无意中发现 C++ 中有 pb_ds(Policy-Based Data Structures)这个库(点击这里获取官方文档)。觉得挺新鲜的,就去谷歌去百度了下。然后就发现这个库里有很多好非常玩儿的东西(不是 NBA 里那个库里)。比如可并堆,平衡树和哈希表等等。怀着收获新玩具的喜悦,我赶紧咻咻咻地用它们写了一波题,感觉还是用得蛮舒服的~然而好东西不能光自己用是吧?于是就有了这篇文章。让我们先看看pb_ds中的可并堆吧~

(说明:以下内容在涉及数据结构的地方会用牺牲严谨性来换取更多的通俗性,请见谅^^)




什么是可并堆

(来自TRiddle,转载请注明出处,谢谢~)

首先我觉得有必要介绍一下什么是可并堆。可并堆就是可以合并的堆。在合并后堆中的元素依旧保持原来的“单调性”。(堆就是一个动态集合,能够插入删除其中的元素,同时能够迅速得知集合中最大或最小的元素。若想了解更多跟堆有关的东西,建议直接维基百科~想要了解跟堆的实现有关的东西,建议看《啊哈!算法》或《挑战程序设计竞赛》)

可并堆的题目

为了对可并堆有更加深入的了解,以及方便待会儿讨论可并堆的效率问题,在这里我打算引入一道算法题(HDUOJ 1512,点击这里获取原题)(如果只想了解用法和结论的话可以跳过这个题目,直接看结尾部分):

题目大意

N 只富有攻击性的猴子,第 i 只猴子的攻击力为 ai
猴子们之间会形成小团体。当猴子 A 和猴子 B 发生争执的时候,猴子 A 的小团体中攻击力最高的猴子

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值