启发式合并

简介

启发式合并本质上是一种优化的暴力,可用于拥有稳定结构的数据结构。


实现思路

考虑梦幻布丁「HNOI2009」

显然的暴力思路是用链表维护每种颜色的位置,然后每次修改的时候暴力合并两条链。

不难证明,这样的最坏时间复杂度将达到\(O(n^2)\),不能接受。

可以观察到,合并的时间复杂度只与被合并的链长度有关,所以可以想到优化合并的过程。

自然地,我们选择每次合并的时候判断两边的大小,将小的合并到大的上面去。

由于最多只能进行\(logn\)次合并,每次合并最坏为\(O(n)\),所以时间复杂度为\(O(nlogn)\),均摊复杂度为\(O(logn)\)


例题

春节十二响「十二省联考2019」

梦幻布丁「HNOI2009」

森林「SDOI 2013」

posted @ 2019-09-07 22:28  Ilverene  阅读(135)  评论(0编辑  收藏  举报