专栏文章

SA 爬了。

P14363题解参与者 12已保存评论 11

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
11 条
当前快照
1 份
快照标识符
@mineegrd
此快照首次捕获于
2025/12/02 01:03
3 个月前
此快照最后确认于
2025/12/02 01:03
3 个月前
查看原文
我但凡会个线性 SA,我都场切了。
考虑枚举替换的左端点 ii,统计贡献。记 t1,t2t_1,t_2 第一个和最后一个不相等的位置为 x,yx,y
然后你发现 t1t_1 能在 ii 这个位置通过 (s1,s2)(s_1,s_2) 换成 t2t_2,当且仅当 s1=t1[i,i+s11]s_1=t_1[i,i+|s_1|-1]s2=t2[i,i+s21]s_2=t_2[i,i+|s_2|-1],并且 ixi\le xi+s11yi+|s_1|-1\ge y
用 SA 刻画一下子串相等的条件,我们发现如果把字符集看成二元组,令 ss 表示 (s1,j,s2,j)(s_{1,j},s_{2,j}) 构成的字符串,tt 同理,那么就是要求 s=t[i,i+s1]s=t[i,i+|s|-1],相等于 ii 这个后缀在一个排名区间内。此外还对 s|s| 有一个限制。
现在相当于有 nn 个点 (sj,[lj,rj])(|s_j|,[l_j,r_j])O(L)\mathcal{O}(L) 次询问有多少个 jj 使得 sjyi+1|s_j|\ge y-i+1rki[lj,rj]\text{rk}_i\in [l_j,r_j]。按长度扫描线维护每个排名的答案,要支持区间加单点查。
先姑且我们会了线性 SA。那么如果直接上 BIT,时间复杂度是 O(LlogL)\mathcal{O}(L\log L),不可接受。但是你弄一个三层的分块平衡一下,时间复杂度 O(nL13+L)\mathcal{O}\left(nL^{\frac{1}{3}}+L\right)。排名区间不要用 ST 表求,改成线段树或线性 RMQ,这样不会带来 O(LlogL)\mathcal{O}(L\log L)
空间复杂度线性。
另外,好像写了 auto [x,y] : g,有可能 CE。憋笑。

评论

11 条评论,欢迎与作者交流。

正在加载评论...