【题目描述】
给定一个长度为 N 的整数序列 a0,a1,…,aN−1。
令 A−1 表示序列 (a0,a1,…,aN−1)。
对于 i=0,1,…,Q−1,依次处理如下查询:
0 k l r b c:将 Ak 复制一份作为 Ai。对 Ai 中的每个 j=l,l+1,…,r−1,令 aj←b×aj+c。
1 k s l r:将 Ak 复制一份作为 Ai。对 Ai 中的每个 j=l,l+1,…,r−1,令 aj←aj′(其中 aj′ 是 aj 在 As 中的值)。
2 k l r:输出 Ak 中的 ∑j=lr−1ajmod998244353。
【输入】
文本
$N$ $Q$
$a_0$ $a_1$ ... $a_{N-1}$
$\textrm{Query}_0$
$\vdots$
$\textrm{Query}_{Q-1}$
【输出】
对每个类型为 2 的查询输出一行一个整数。
【输入样例】
文本
5 11
1 2 3 4 5
2 -1 0 5
0 -1 2 4 100 1
0 1 1 3 100 3
2 2 1 5
2 2 0 5
1 2 -1 1 3
2 5 0 1
2 5 0 2
2 5 0 3
2 5 0 4
2 5 0 5
【输出样例】
文本
15
30712
30713
1
3
6
407
412
【输入样例2】
文本
10 10
98571302 347764691 874908879 522525408 665451426 585614689 752625419 867933974 588349757 331245164
2 -1 5 7
1 -1 -1 8 9
0 -1 3 4 559932567 67455332
1 1 1 0 8
1 3 1 5 9
2 1 1 2
1 2 -1 5 6
0 -1 0 9 703344909 379527638
2 6 2 9
2 7 7 9
【输出样例2】
文本
339995755
347764691
266369014
783560804
【数据范围】
设 ti 表示第 i 个查询的类型(0≤i<Q,ti∈{0,1,2})。
- 1≤N≤100000
- 1≤Q≤100000
- 0≤a<998244353
- 1≤b<998244353
- 0≤c<998244353
- −1≤k<i
- k=−1 或 tk∈{0,1}
- −1≤s<i
- s=−1 或 ts∈{0,1}
- 0≤l<r≤N
【来源】
Library Checker(yosupo06) persistent_range_affine_range_sum