惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
博客园_首页
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
B
Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享

某岛

AtCoder Beginner Contest 409 Luogu P5325. 【模板】Min_25 筛 UOJ #188. 【UR #13】Sanrd AtCoder Beginner Contest 371 AtCoder Beginner Contest 369 RPGMaker 2k3 百科 OneShot 的考古 2024“开创拓芯”游戏创享节的相关记录 CJ 回来后的戒断反应 Luogu P10221. [省选联考 2024] 重塑时光 Luogu P5308 [COCI2018-2019#4] Akvizna wqs 二分 歌唱王国 Lean 相关 BZOJ 3153. Sone1 The 2023 ICPC World Finals Luxor 新巴别塔 Sora 的想象与思考 Facebook Hacker Cup 2023 Round 1 AtCoder Beginner Contest 322 LLaMA 2 相关 HuggingFace AI Game Jam ACL 2023 Trans 相关… Luogu P2053. [SCOI2007] 修车 Luogu P1973. [NOI2011] NOI 嘉年华 Luogu P1933. [NOI2010] 旅行路线 Luogu P1954. [NOI2010] 航空管制 Luogu P2048. [NOI2010] 超级钢琴 Luogu P2046. [NOI2010] 海拔
区间子串询问
2025-01-03 · via 某岛

January 3, 2025

区间子串询问

初见杀,实际套路,应该放一起做!

首先能离线当然考虑离线(Ukkonen 可以魔改支持左删,但是好像还是不能很好的支持左加和右删,否则我们甚至能莫队?),
那么我们只要维护一个线段树记录询问左端点在不同位置的答案,考察增加操作对线段树的影响,发现只影响 fail 树向上的节点,最后一步动态树优化即可,复杂度 O(nlog2n + mlogn)。

和 BZOJ_2555 相比,这里由于我们不需要强制在线,动态树不需要在后缀自动机插入字符时候跟随 SAM 变化形态,只需要在全部插入完后根据 fail 树构建即可,因而也可以树链剖分啊启发式合并啊替代动态树的环节。

具体来看,先考察 Luogu P6292 区间本质不同子串个数,每次添加新字符时,先把所有位置都加 1,然后类似 dquery 一题的搞法,我们记录上次添加的时刻以去掉重复计数的部分,而这只需要沿着 fail 树向上,并记录每个状态上次计数的时刻即可。这里的线段树只需要支持区间加减,区间求和,因而也可以用树状树组替代。

观察这里的动态树这里其实唯一的用处就只有压缩 fail 树 = =,我们只需要维护上次访问的标记即可,其它信息都可以从 SAM 中拿到,因为 Splay 之后父节点和自己刚好形成压缩后的 endpos 区间。

fzoi 那枚只需要把线段树从区间加常数变成加等差数列。再看 uoj 608,这里我们线段树需要支持的是区间等差数列 checkMax,由于这个标记是单调的,所以可以简单标记持久化,动态树同样只起到压缩 fail 树的功能,完全不用改!

Posted by xiaodao
Category: 日常