1 条题解

  • 0
    @ 2025-8-24 21:42:17

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar kczno1
    **

    搬运于2025-08-24 21:42:17,当前版本为作者最后更新于2016-12-22 16:24:18,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这题是一道后缀数组的模板题。

    出现k次,相当于我们选择了k个后缀,之后求出他们的最长公共前缀。

    我们知道,后缀(j)和后缀(k)的 最 长 公 共 前 缀 为height[rank[j]+1],

    height[rank[j]+2],height[rank[j]+3],…,height[rank[k]]中的最小值(设rank[j]<rank[k])。

    那么设k个后缀中rank的min=l,max=r,k个的最长公共前缀就是min(height[l+1->r])

    所以k个后缀在rank上一定是连续的。

    枚举i,维护height[i->i+k-1]的min,用单调队列即可O(N)解决。(还要加上求出rank,height的时间)

    • 1

    信息

    ID
    1917
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者