ejudge的博客

博客

象题题解

2021-07-03 16:10:13 By ejudge

首先将所有字符串拼在一起做后缀数组。

我们需要求出每个后缀有多少个前缀满足条件(记为 $f_i$)。

对于每个后缀,预处理出往后扩展到哪里会满足条件。对于这样的一段区间,公共前缀就是height的最小值(记为 $x$ )。

一个区间 $(l,r,x)$ 对 $f$ 有以下影响:

  1. 对于 $l \leq i \leq r$,$f_i\leftarrow\max(f_i,x)$。
  2. 对于 $i>r$,$f_i \leftarrow \max(f_i,\max(h_l \cdots h_i))$

对于(1)维护一个单调队列,对于(2)直接记录 $l$ 的最大值即可。

时间复杂度 $O(N\log N)$

评论

123456
  • 2021-07-04 10:27:45
  • Reply
hyfans
这题解写的太拉了,去我HY大神的博客 http://hydd.cf 查看吧
  • 2021-07-04 15:47:55
  • Reply

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。