「POI 2005」SZA-Template 「失配树」「双向链表」「思维」
Posted lim-817
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「POI 2005」SZA-Template 「失配树」「双向链表」「思维」相关的知识,希望对你有一定的参考价值。
先来观察答案的几个强性质。
首先答案肯定是原串的一个( t{border}),也就是失配树上的一条链。
再进一步观察:比如说答案在原串出现的位置分别为(p_1, p_2, p_3... p_k)(不妨设其严格升序),那么一定有(max (p_i - p_{i-1}) leq length(ans))。
你问我为什么?如果大于的话就接不上了啊...
然后我们发现,只要满足上面那两个条件,那这个串一定就是个合法串。于是我们把这套东西搬到失配树上:
- 这个串是n在树上的祖先
- 这个串在树上的子树里所有节点的max_gap (leq) 这个串结尾的下标
问题就变成了怎么维护max_gap.
你发现这个东西维护最靠右边的1,最靠左边的1,答案就可以用线段树合并做到(mathcal{O(n log n)}),但是发现空间有点爆炸。
于是发现,可选的串只在一条链上,所以可以先全加进去,然后再逐步删,就可以用线段树做到(mathcal{O(n log n)})时间,(mathcal{O(n)})空间了。
然后发现这根本不用线段树,因为是逐步删答案只会不断变大,双向链表就可以解决。所以复杂度是(O(n))的。
以上是关于「POI 2005」SZA-Template 「失配树」「双向链表」「思维」的主要内容,如果未能解决你的问题,请参考以下文章
[BZOJ1537][POI2005]Aut- The Bus
[Luogu3425][POI2005]KOS-Dicing