二叉树
二叉堆一般用于涉及插入、删除、查询最值得题目。往往配合其它题型使用。
对顶堆
对顶堆常用于动态维护的问题。
动态求解前i个数的中位数。
动态求解前u[i]个数第i大的数。
贪心题目。需要用到二叉堆的查询最值、插入和删除功能。
多路归并问题。注意到是求和问题,题目让求m个序列“合并”得到的n个值,如果我们得到了前m - 1个序列“合并”n个值,那么只需要把这n个值看成一个新的序列,转换成两个序列“合并”成n个值的问题。很明显用递归或递推都可以。我们只需要解决如何“合并”两个序列即可。
两个序列如何合并呢?
A : a1 a2 a3 a4 …… an(A已经排好序)
B : b1 b2 b3 b4 …… bn
我们把那n ^ 2的序列写成如下形式 :
b1 + a1 b1 + a2 b1 + a3 …… b1 + an
b2 + a1 b2 +