P10716 简单的字符串问题 题解
题目传送器
更爽的阅读体验
做法
前面的部分都和其他题解一样,先建出失配树,将问题转化成寻找有多少个点 满足在 的子树中编号跳 次后到达的节点 满足 。
先使用启发式合并动态维护 子树内的每个节点构成的集合,然后在这个集合中暴力跳,并储存 表示 跳 步后到达的节点。因为每次会从 跳到至少为 的节点,所以复杂度为 。
接下来的处理询问。对于询问 即求有多少个 的祖先 满足 。
将询问离线下来,跑 dfs 的时候模拟栈就能直接记录从当前点到跟的路径上的信息,开 个数据结构,第 个维护当前链上的节点跳 步后到达的节点的集合,需要支持增删,求排名。这里使用平衡树,应该也可以使用主席树。
总复杂度为 。