你有一个长度为 n 的序列 v1,v2,…,vn,初值全都为 0。
你要进行 m 次操作:
- 操作 1:给出 l,r,a,将 vl,vl+1,…,vr 的值加上 a。
- 操作 2:给出 l,r,求在vl,vl+1,…,vr 中选出一个非空的子序列,求所有方案中选出的子序列的方差之和,答案对 998244353 取模。
一个序列 a1,a2,…,an 的方差定义为令 ˉa=1n∑ni=1ai,则方差为 1n∑ni=1(ai−ˉa)2。
输入格式
第一行两个整数 n,m。
接下来 m 行,每行有四个整数 1 l r a 或三个整数 2 l r,表示第一类或第二类操作,保证 0≤a<998244353。
输出格式
对每个第二类操作,输出一行表示答案。
样例数据
样例 1 输入
4 4 1 2 4 1 2 1 3 1 1 2 2 2 1 4
样例 1 输出
388206138 339680376
样例 1 解释
对于第一个测试数据的第一个询问,序列是 {0,1,1},所有的子序列中只有 {0,1},{0,1} 和 {0,1,1} 方差不为 0,分别是 14,14,29,总和为 1318。
样例 2 输入
10 20 1 4 4 520968631 1 4 7 988452236 1 4 9 355405133 2 9 10 2 2 8 1 3 5 400339337 2 3 8 2 6 7 2 4 10 2 7 9 1 3 8 387471594 1 2 4 559944503 2 1 8 1 4 7 108832063 2 5 9 2 4 8 1 3 8 622785003 2 9 10 1 2 7 252591713 1 5 6 666406180
样例 2 输出
570099967 274921471 285269733 0 571283655 970723747 401326984 17519114 844628984 570099967
子任务
Idea:ccz181078,Solution:ccz181078,Code:ccz181078,Data:ccz181078
对于 10% 的数据,n≤10,m≤1000。
对于 20% 的数据,n≤16,m≤1000。
对于 30% 的数据,n≤100,m≤103。
对于 50% 的数据,n,m≤103。
对于另外10%的数据,n≤105,保证首先是第一类操作,然后是第二类操作。
对于 80% 的数据,n,m≤105。
对于 100% 的数据,1≤n≤5×106,1≤m≤105。