蚯蚓幼儿园有 只蚯蚓。幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演。
所有蚯蚓用从 到 的连续正整数编号。每只蚯蚓的长度可以用一个正整数表示,根据入园要求,所有蚯蚓的长度都不超过 。神刀手希望这些蚯蚓排成若干个队伍,初始时,每只蚯蚓各自排成一个仅有一只蚯蚓的队伍,该蚯蚓既在队首,也在队尾。
神刀手将会依次进行 次操作,每个操作都是以下三种操作中的一种:
- 给出 和 ,令 号蚯蚓与 号蚯蚓所在的两个队伍合并为一个队伍,具体来说,令 号蚯蚓紧挨在 号蚯蚓之后,其余蚯蚓保持队伍的前后关系不变。
- 给出 ,令 号蚯蚓与紧挨其后的一只蚯蚓分离为两个队伍,具体来说,在分离之后, 号蚯蚓在其中一个队伍的队尾,原本紧挨其后的那一只蚯蚓在另一个队伍的队首,其余蚯蚓保持队伍的前后关系不变。
- 给出一个正整数 和一个长度至少为 的数字串 ,对于 的每个长度为 的连续子串 (这样的子串共有 个,其中 为 的长度),定义函数 ,询问所有这些 的乘积对 取模后的结果。其中 的定义如下:
对于当前的蚯蚓队伍,定义某个蚯蚓的向后 数字串为:从该蚯蚓出发,沿队伍的向后方向,寻找最近的 只蚯蚓(包括其自身),将这些蚯蚓的长度视作字符连接而成的数字串;如果这样找到的蚯蚓不足 只,则其没有向后 数字串。
而 表示所有蚯蚓中,向后 数字串恰好为 的蚯蚓只数。
Constraints
, , ,
Solution
暴力维护对每个队伍链表,维护每条蚯蚓向后长度为 的字符串的哈希值。
每一次修改操作只需要暴力修改跨越操作点的 个字符串,查询时直接枚举。
从总体考虑合并操作,可得时间复杂度实际为 。
Code
1 |
|