优秀的建筑工人
题号:NC213478
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有一排整齐排列的n个砖(编号从0到n-1),要么是红色,要么是黑色。
作为一名优秀的建筑工人,你需要听从包工头的命令(悲催的命运)。
包工头有以下指令,你必须按照他的指令实施,指令如下:
0 l r 把第l到第r个砖中黑色的全部替换成红色的

1 l r 第l到第r个砖中红色的全部替换成黑色的

2 l r 第l到第r个砖中红色的全部替换成黑色的,黑色的全部替换成红色的

3 l r 查看第l到第r个砖中一共有多少个黑色的砖

4 l r 查看第l到第r个砖中最长连续的黑色的砖有多少个
对于他的指令,相应的替换操作,你需要默默执行;相应的查看操作,你需要输出一行一个数作为答案告知包工头。

输入描述:

输入数据第一行包括2个数,n和m,分别表示砖的个数和指令数量

第二行包括n个数,表示n个砖的初始状态
0代表红色的砖,1代表黑色的砖
接下来m行,每行3个数,op, a, b,(0<=op<=4,0<=a<=b<n)表示包工头指令的内容

输出描述:

对于每一个指令,输出一行,包括1个数,表示其问题的答案

示例1

输入

复制
10 10

 0 0 0 1 1 0 1 0 1 1

 1 0 2

 3 0 5

 2 2 2

 4 0 4

 0 3 6

 2 3 7

 4 2 8

 1 0 5

 0 5 6

 3 3 9

输出

复制
5
2
6
5

备注:

1<=n, m<=100000