U258786 【模板】败者食尘

题目背景

败者食尘在 OI 中有着广泛的应用,可以用于数据结构可持久化、深搜优化、dp 优化等。 本题为败者食尘维护可持久化数列模板题。 不保证卡掉了时间复杂度不正确的解法。 想打主席树的请自觉。

题目描述

有一个长度为 $n$ 的数列,需要进行以下操作: 1. ```1 l r a``` 给区间 $[l,r]$ 加上 $a$。 2. ```2 l r a``` 将区间 $[l,r]$ 赋值为 $a$。 3. ```3 l r``` 查询 $[l,r]$ 的区间和。 4. ```4 k``` 向前完全回溯 $k$ 个版本。 其中,只有操作1,2会创建新版本。 完全回溯指回溯到相应版本,并将该版本之后的所有版本永久删除。 (可以自己用一下败者食尘理解一下)

输入格式

第一行两个正整数 $n,m$,分别表示序列长度和操作数。 第二行 $n$ 个整数,表示初始序列。 接下来 $m$ 行,表示操作。

输出格式

对于所有的操作3,输出相应的答案。

说明/提示

所有输出结果对 $998244353$ 取模。 对于 $36\%$ 的数据,有 $n,m \le 10^3$。 对于 $100\%$ 的数据,有 $n,m \le 10^5$。 存在 $24\%$ 的数据,无操作 $4$。 所有输入的数字均为正整数且 $< 998244353$。