串串杂题

串串杂题训练:

P4248 [AHOI2013] 差异

求 $ \sum\limits_{1<=i,j<=n} {len(t_i) + len(t_j) - lcp(t_i,t_j)} $ 。

首先注意到前面两项是长度与字符串本身是什么无关,所以提出来直接算。

然后看后面那一坨东西。

$ lcp(t_i,t_j) $ 这个东西直接算肯定是 $ n^2 $ 的,那我们考虑算贡献。

先将整个串串的后缀数组和 height 数组求出来。

注意到 $ lcp(t_{i,i+1,\dots,j}) $ 是等于 $ \min(ht_i,ht_i+1,\dots,ht_j) $ 的。

那我们就考虑算出一个位置的 $ ht[i] $ 对哪些区间是有贡献的。

然后就是向左向右分别找到第一个比它大的 $ ht[j] $ 的位置两边相乘即可。

这个东西单调栈就可以维护。

posted @ 2025-03-24 16:28  LittleFoxFairy  阅读(30)  评论(3)    收藏  举报