loj#P2303. 「NOI2017」蚯蚓排队
「NOI2017」蚯蚓排队
题目描述
蚯蚓幼儿园有 只蚯蚓。幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演。
所有蚯蚓用从 到 的连续正整数编号。每只蚯蚓的长度可以用一个正整数表示,根据入园要求,所有蚯蚓的长度都不超过 。神刀手希望这些蚯蚓排成若干个队伍,初始时,每只蚯蚓各自排成一个仅有一只蚯蚓的队伍,该蚯蚓既在队首,也在队尾。
神刀手将会依次进行 次操作,每个操作都是以下三种操作中的一种:
-
给出 和 ,令 号蚯蚓与 号蚯蚓所在的两个队伍合并为一个队伍,具体来说,令 号蚯蚓紧挨在 号蚯蚓之后,其余蚯蚓保持队伍的前后关系不变。
-
给出 ,令 号蚯蚓与紧挨其后的一只蚯蚓分离为两个队伍,具体来说,在分离之后, 号蚯蚓在其中一个队伍的队尾,原本紧挨其后的那一只蚯蚓在另一个队伍的队首,其余蚯蚓保持队伍的前后关系不变。
-
给出一个正整数 和一个长度至少为 的数字串 ,对于 的每个长度为 的连续子串 (这样的子串共有 个,其中 为 的长度),定义函数 ,询问所有这些 的乘积对 取模后的结果。其中 的定义如下:
对于当前的蚯蚓队伍,定义某个蚯蚓的向后 数字串为:从该蚯蚓出发,沿队伍的向后方向,寻找最近的 只蚯蚓(包括其自身),将这些蚯蚓的长度视作字符连接而成的数字串;如果这样找到的蚯蚓不足 只,则其没有向后 数字串。例如蚯蚓的队伍为 号蚯蚓在队首,其后是 号蚯蚓,其后是 号蚯蚓(为队尾),这些蚯蚓的长度分别为 、 、 ,则 号蚯蚓的向后 数字串为 456
, 号蚯蚓没有向后 数字串,但其向后 数字串为 56
,其向后 数字串为 5
。
而 表示所有蚯蚓中,向后 数字串恰好为 的蚯蚓只数。
输入格式
从标准输入读入数据。
输入文件的第一行有两个正整数 ,分别表示蚯蚓的只数与操作次数。
第二行包含 个不超过 的正整数,依次表示编号为 的蚯蚓的长度。
接下来 行,每行表示一个操作。每个操作的格式可以为:
-
1
()表示:令 号与 号蚯蚓所在的两个队伍合并为一个队伍,新队伍中, 号蚯蚓紧挨在 号蚯蚓之后。保证在此操作之前, 号蚯蚓在某个队伍的队尾, 号蚯蚓在某个队伍的队首,且两只蚯蚓不在同一个队伍中。 -
2
()表示:令 号蚯蚓与紧挨其后一个蚯蚓分离为两个队伍。保证在此操作之前, 号蚯蚓不是某个队伍的队尾。 -
3
(为正整数,为一个长度至少为的数字串)表示:询问 的每个长度为 的子串 的 的乘积,对 998244353 取模的结果。 的定义见题目描述。
同一行输入的相邻两个元素之间,用恰好一个空格隔开。
输入文件可能较大,请不要使用过于缓慢的读入方式。
输出格式
输出到标准输出。
依次对于每个形如 3
的操作,输出一行,仅包含一个整数,表示询问的结果。
5 9
3 1 3 5 3
3 333135 2
3 333135 1
1 1 3
1 2 5
1 3 2
1 5 4
3 333135 2
3 333135 1
3 333135 3
0
81
1
81
0
2 10
6 6
3 666666 1
1 1 2
3 666666 2
3 666666 4
3 666666666666666666666666666666 1
2 1
1 2 1
3 666666 2
3 666666 4
3 666666666666666666666666666666 1
64
1
0
75497471
1
0
75497471
数据范围与提示
保证 ,, 。
设 为某个输入文件中所有询问的 的长度总和,则 。
设 为某个输入文件中形如2
的操作的次数,则 。
每个测试点的详细信息见下表:
测试点编号 | 全为 | |||||
---|---|---|---|---|---|---|
1 | No | |||||
2 | ||||||
3 | ||||||
4 | ||||||
5 | ||||||
6 | ||||||
7 | Yes | |||||
8 | No | |||||
9 | ||||||
10 | ||||||
11 | ||||||
12 | ||||||
13 | Yes | |||||
14 | No | |||||
15 | ||||||
16 | ||||||
17 | ||||||
18 | ||||||
19 | ||||||
20 | ||||||
21 | Yes | |||||
22 | No | |||||
23 | ||||||
24 | ||||||
25 |
如果一个测试点的“全为1
”的一列为“Yes”,表示该测试点的所有蚯蚓的长度均为1,并且所有询问串的每一位也均为1
。