码迷,mamicode.com
首页 > 其他好文 > 详细

「POI 2005」SZA-Template 「失配树」「双向链表」「思维」

时间:2020-02-21 22:34:04      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:gap   先来   length   order   严格   复杂   出现   就是   链表   

先来观察答案的几个强性质。

首先答案肯定是原串的一个\(\tt{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 「失配树」「双向链表」「思维」

标签:gap   先来   length   order   严格   复杂   出现   就是   链表   

原文地址:https://www.cnblogs.com/LiM-817/p/12343176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!