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

设左儿子的长度和哈希值分别为 \(sz_a,h_a\),右儿子的长度和哈希值分别为 \(sz_b,h_b\),合并后的长度为 \(sz_a + sz_b\),哈希值为 \(h_a \times base^{sz_b} + h_b\)

1. CF213E Two Permutations

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

2. CF452F Permutation & P2757 [国家集训队]等差子序列

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

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

原文地址:http://www.cnblogs.com/zltzlt-blog/p/16797435.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性