线段树维护哈希

显然两个区间的哈希值是可以合并的,所以线段树可以维护区间的哈希值。

设左儿子的长度和哈希值分别为 sza,ha,右儿子的长度和哈希值分别为 szb,hb,合并后的长度为 sza+szb,哈希值为 ha×baseszb+hb

1. CF213E Two Permutations

枚举 b 的值区间 [x,x+n1],令 posbx=x,那么我们需要判断 [bposxn+1,bposx] 在原排列里构成的子序列的哈希值是否与排列 a 整体加 x1 的哈希值相等。类似滑动窗口,每次添加、删除一个数,然后维护整个序列的哈希值即可。

2. CF452F Permutation

判断序列里是否存在一个子序列是三元等差数列,可以枚举中间项 b,如果存在公差 k 使得 bk,b+k 在序列中出现在 b 的异侧就是 YES,否则就是 NO。但是直接枚举 b,kO(n2) 的。

可以考虑优化掉枚举公差 k 的过程。从小到大枚举 b,维护一个 01 串表示 x 是否出现过,那么如果串不是回文的就表示存在一个 k 满足 xk 出现过而 x+k 没出现过,符合判定条件。于是直接线段树维护即可。

3. P2757 [国家集训队]等差子序列

显然若存在 len>3 的等差子序列,那么一定存在 len=3 的等差子序列。剩下就是 CF452F 了。

4. P4696 [CEOI2011] Matching

b 离散化后枚举子串,剩下就是 CF213E 了。

posted @   zltzlt  阅读(713)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示