首页 > 其他 > 详细

#0023. 「ZROI」2020提高组十连测d1t2 palindrome

时间:2020-09-08 08:36:59      阅读:71      评论:0      收藏:0      [点我收藏+]

题目链接

  http://zhengruioi.com/contest/684/problem/1533

题目解法

  标题很有用啊!我们可以关注到AArA的实质是两个长度为偶数的回文串。很容易想到回文数算法manacher。

  如果f[i]表示[i-f[i]+1,i+f[i]]这个子串是回文串(处理方法详见manacher算法,维护一个当前r最大的回文串,如果i<=r取对称的值,然后继续检查大于r的部分,因为所有的循环都伴随着r的只增不减,复杂度O(n).),对于每一个i我们显然要求的是满足以下条件的j的数量:

    j<i && i-j<=f[i] && i-j<=f[j]

  我们很容易可以得出,以i为第二个回文串中心的AArA数量为

技术分享图片(typo error 应该是>=i)
  我们可以用一个树状数组维护f[j]+j是否>=当前i。对于每一个i,在计算结束前我们更新i这个位置在bit中的值;同时,用一个vector记录下每一个f[j]+[j]出现的位置,在进行每一个i的计算前,把f[j]+j=i-1的位置在bit上的值全部-1。这样我们对于每一个i的查询就是一个单点修改+区间查询+单点修改的过程,复杂度为O(n+n·log n)。

#0023. 「ZROI」2020提高组十连测d1t2 palindrome

原文:https://www.cnblogs.com/myrcella/p/13630135.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!