题意 给定一个长为n的01序列,有五种操作,总共操作m次(n,m<=1e5) 0. 把[a,b]区间内的所有数全变成0 把[a,b]区间内的所有数全变成1 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0 询问[a,b]区间内总共有多少个1 询问[a,b]区间内最多有多少个连续的1 思路 线段树,线段树本身维护区间中01个数和最长连续01个数 前三种操作用lazy标记维护 除此之外,还由于需要区间合并,将子区间合并的时候需要左区间的后继长度和右区间的前驱长度 所以还得维护每个区间的前驱和后继 代码 #include<bits/stdc++...