变换01串
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个长度为n的01串,你可以执行以下两种变换:
1.将字符串的前缀按位取反;
2.将字符串的后缀按位取反。
现在有共q次的询问或操作,每次询问或者操作给定t,l,r(方便起见,默认下标从1开始):
t=1,求对子串Sl...Sr进行以上两种变换使得该子串变为全为1或者全为0的最少变换次数;
t=2,将子串Sl...Sr按位取反。

输入描述:

第一行输入n和q,n代表01串的长度,q代表询问和操作的总次数。(1<=n,q<=105)。
接下来q行,每行输入三个数t,l,r。(1<=t<=2,1<=l<=r<=n)

输出描述:

对于每组测试数据,输出对应t=1时,子串Sl...Sr全部变为1或者0的最少变换次数。
示例1

输入

复制
10 5
0010010010
1 6 10
2 4 6
2 5 7
2 6 8
1 2 5

输出

复制
3
2