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$。