时空限制
2.5S/512M
题目描述
给定一个整数 n 和一个长度为 2n 的数组 f(下标从 0 到 2n−1)。
定义了一个 2n×2n 的矩阵 W(下标从 0 到 2n−1),其中矩阵元素 Wi,j=fi⊕j,这里 ⊕ 表示按位异或(XOR)运算。
现在需要支持以下两种操作:
- 修改操作:给定下标 i 和整数值 v,将 fi 的值增加 v。
- 查询操作:给定两个坐标 (x1,y1) 和 (x2,y2),计算矩阵 W 中以这两点为对角顶点的子矩阵元素之和。即计算:i=x1∑x2j=y1∑y2Wi,j
由于查询结果可能很大,需要将结果对 998244353 取模。
格式
输入格式
第一行包含两个整数 n 和 Q,分别表示数组大小参数和操作的总次数。
第二行包含 2n 个整数,表示数组 f 的初始值 f0,f1,…,f2n−1。
接下来 Q 行,每行描述一个操作:
- 若该行为 1iv,表示一个修改操作。
- 若该行为 2x1y1x2y2,表示一个查询操作。具体意义见题目描述。
输出格式
对于每个查询操作,输出一行,包含一个整数,表示所求的和模 998244353 的结果。
样例
样例输入 #1
2 3
10 20 30 40
2 1 1 2 2
1 3 5
2 1 1 2 2
样例输出 #1
100
110
数据规模
对于 20% 的数据,1≤n≤10,且仅有查询操作。
对于 100% 的数据,1≤n≤20,1≤Q≤2×105,0≤f[i],v<998244353。对于查询操作:0≤x1≤x2<2n 且 0≤y1≤y2<2n。对于修改操作:0≤i<2n。