2572. 生成魔咒
题目链接
2572. 生成魔咒
魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示。
例如可以将魔咒字符 拼凑起来形成一个魔咒串 。
一个魔咒串 的非空子串被称为魔咒串 的生成魔咒。
例如 时,它的生成魔咒有 五种。 时,它的生成魔咒有 三种。
最初 为空串。
共进行 次操作,每次操作是在 的结尾加入一个魔咒字符。
每次操作后都需要求出,当前的魔咒串 共有多少种生成魔咒。
输入格式
第一行一个整数 。
第二行 个数,第 个数表示第 次操作加入的魔咒字符。
输出格式
输出 行,每行一个数。第 行的数表示第 次操作后 的生成魔咒数量。
数据范围
用来表示魔咒字符的数字 满足
输入样例:
输出样例:
解题思路
后缀数组
先考虑静态求不同子串的问题,即给定一个字符串,求其不同子串的数量。所有子串构成的集合等于所有后缀的所有前缀构成的集合。后缀数组中 中定义的是排名为 的后缀与排名为 的后缀的最长公共前缀(不包含替补字符),按排名遍历后缀,当遍历到排名为 的后缀时,其含有的前缀数量为 ,而又与排名为 的后缀含有的公共前缀数量为 ,为了避免重复,排名为 的后缀对整体的贡献为 ,故所有不同子串数量为
现在考虑每增加一个字符不同子串的数量。因为增加一个字符对前面的后缀有影响,不妨反过来,即将整个字符串翻转,每次删除第一个字符(对应从后往前操作)求不同子串数量,这时每次都只会删除一个后缀,同时用双链表维护排名后缀之间的连接关系,每删除一个后缀,答案减去该后缀对答案的贡献,同时加上新的连接对答案的贡献。另外,由于字符过大且答案与值的大小无关,所以可用哈希表离散化
- 时间复杂度:
代码
__EOF__

本文作者:acwing_zyy
本文链接:https://www.cnblogs.com/zyyun/p/16222417.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zyyun/p/16222417.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!