思路:
其实就是个比较复杂的线段树模板.
首先由于取反操作的存在, 所以需要同时存储有关0和1的数据.
同时需要注意标记下放的顺序, 先抹平后取反(因为先取反后抹平与直接抹平效果是一样的).
查询方面, 对于”最多连续个1”可以采用与区间连续最大和一样的思路, 即储存每段区间最大连续长度还有从左右端点延申出来的最大长度. 合并时一共三种情况, 即全在左段或右段, 或跨越左右两段.
代码:
1 |
|
其实就是个比较复杂的线段树模板.
首先由于取反操作的存在, 所以需要同时存储有关0和1的数据.
同时需要注意标记下放的顺序, 先抹平后取反(因为先取反后抹平与直接抹平效果是一样的).
查询方面, 对于”最多连续个1”可以采用与区间连续最大和一样的思路, 即储存每段区间最大连续长度还有从左右端点延申出来的最大长度. 合并时一共三种情况, 即全在左段或右段, 或跨越左右两段.
1 | #include <cstdio> |