[TJOI2019]甲苯先生和大中锋的字符串
[题目链接]
链接
[思路要点]
$ \text{sam}$ 裸题,但是由于 \(\text{sam}\) 不熟练,于是用 \(\text{sa}\) 做
建出 \(\text{sa}\) 之后单调队列维护连续 \(k\) 个的 \(lcp\) 长度,设为 \(len\),以及两边相邻的位置上分别扩展一个的新 \(lcp\) 长度,这个就是 \(height\) 数组中两个值,然后长度在这两个值中较大者加 \(1\) 和 \(len\) 之间的子串恰好出现 \(k\) 次,用差分记录下来,然后扫一遍取最大值即可
注意:
- \(k=1\) 时需要特判
- 第五、十两个点的 \(tc\) 数量和实际询问字符串数量不同,所以不能用快读。。。
- \(\text{bzoj}\) 跑不过去,扒了 \(\text{luogu}\) 题解上数篇都跑不过去,怀疑数据锅比较严重
- 由于 \(\text{sa}\) 多一个 \(\log\),因此写的时候得略微卡常
[代码]
// Copyright: lzt
#include
#include
#include
#include
#include
#include