zoukankan      html  css  js  c++  java
  • bzoj5384

    题意

    区间本质不同回文串个数

    做法一

    考虑加入右端点(i)后用线段树维护[左端点,(i)]的答案
    (x)为当前点(i)的最长回文后缀,(y)(x)的最长回文后缀。令(x=S[l_1,i],y=S[l_2,i])
    显然,若(xle 2|y|),则左端点(in(l_1,l_2))中不会出现(y),否则有更小周期与最长回文后缀矛盾。故(y)最近出现的位置的左端点为(l_1)
    这样的话可以将(x)的所有回文后缀分成(O(log))组,分别只需要知道每组最长回文串最近一次出现的位置即可。

    先把PAM建出来,用线段树动态维护PAM子树就可以知道最近一次出现的位置了

    做法二

    分块+PAM

    分块,左端点为块右端点为(n)(sqrt n)个PAM
    对于询问([l,r]),把散块([l,k))加入

    直接写空间会被卡。网上找了一份代码,学了点trick
    code

    题外话

    yy出了一种分块+manacher的做法,(O(nsqrt n)),bzoj好像现在爆炸了,等交过了再写

  • 相关阅读:
    例6-5
    例6-3
    例6-2
    例6-1
    例5-9
    python3
    python3
    python3
    python3
    python3
  • 原文地址:https://www.cnblogs.com/Grice/p/12820295.html
Copyright © 2011-2022 走看看