「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))

你问我为什么?如果大于的话就接不上了啊...

然后我们发现,只要满足上面那两个条件,那这个串一定就是个合法串。于是我们把这套东西搬到失配树上:

  1. 这个串是n在树上的祖先
  2. 这个串在树上的子树里所有节点的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 「失配树」「双向链表」「思维」的主要内容,如果未能解决你的问题,请参考以下文章

P3431 [POI2005]AUT-The Bus

[BZOJ1537][POI2005]Aut- The Bus

[POI2005]SAM-Toy Cars

[Luogu3425][POI2005]KOS-Dicing

P3420 [POI2005]SKA-Piggy Banks

Bzoj 1537: [POI2005]Aut- The Bus 题解 [由暴力到正解]