题目描述
给定 n 个硬币的初始状态,以及 m 次如下类型的操作:
- 1 x y: 将 [x,y] 之间的硬币每隔一个翻转一个,即翻转 x,x+2,x+4,⋯,x+2t (x+2t≤y);
- 2 x y: 将 [x,y] 之间的硬币每隔两个翻转一个,即翻转 x,x+3,x+6,⋯,x+3t (x+3t≤y);
- 3 x y: 将 [x,y] 之间的硬币全部翻转;
- 4 x y: 查询 [x,y] 之间正面朝上的硬币个数。
输入格式
输入的第一行包含两个正整数 n,m,用一个空格分隔,分别表示硬币数和操作数。
第二行包含 n 个整数 f1,f2,⋯,fn,相邻整数之间使用一个空格分隔,表示每个硬币的初始状态,其中 fi=0 表示第 i 个硬币为反面朝上,fi=1 表示第 i 个硬币为正面朝上。
接下来 m 行,每行包含三个正整数 ai,xi,yi,相邻整数之间使用一个空格分隔,表示一次操作。
输出格式
输出若干行。对于每次查询操作(4 x y),输出一行包含一个整数表示该查询的答案。
5 8
1 0 0 1 0
1 2 3
4 1 5
2 3 5
4 2 5
3 1 5
4 2 3
3 1 4
4 1 5
3
3
0
5
提示
【评测用例规模与约定】
对于 20% 的评测用例,1≤n,m≤5000;
对于另外 20% 的评测用例,1≤n,m≤105,且没有 1 x y 类型的操作;
对于另外 20% 的评测用例,1≤n,m≤105,且没有 2 x y 类型的操作;
对于所有评测用例,1≤n≤5×105,1≤m≤105,fi∈{0,1},ai∈{1,2,3,4},1≤xi≤yi≤n。