找不到题,没有代码
一、题目
题目描述
有一颗字典树,现在每次加入一个叶子,你需要回答这个点到根路径代表的字符串的最长公共前缀后缀是多少,强制在线。
数据范围
节点数,操作数,字符集大小均为以内。
二、解法
最长公共前缀后缀显然是,但是的均摊复杂度分析在树上就失效了,我们要用其他方法。
0x01 trans的优化
考虑数组表示在后面安放最后会跳到的地方(用来最长公共前缀递推),有下列柿子:
所以我们只需要维护出即可,可以用可持久化线段树,我们的直接拷贝的,由于我们考虑当前就配成功的情况,到是更新为,时间复杂度。
0x02 fail的改善
考虑改良的跳法,由于一个定理长度-最长公共前缀后缀=最小周期
,我们对的跳法分类讨论:
- ,直接跳。
- ,我们找到最小周期,然后直接找到当前位置在第一个周期的对应位置,由于当前已经失配,所以所有的周期都不用考虑了,我们加速它,直接跳到最小的,继续跳。
容易发现上述操作都会至少让处理的长度少一半,所以时间复杂度就是。
还是没有代码,以后填坑吧
来源:CSDN
作者:C202044zxy
链接:https://blog.csdn.net/C202044zxy/article/details/104055472