思路就是建两颗树 左树1 为黑树 右树0为白树 ^=来操作懒惰标记
统计左 中 右 连续子列 完成题目要求
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX_N = 100005;
struct node {
int len;
int len_l;
int len_r;
int down;
}arr1[4*MAX_N],arr0[4*MAX_N];
void up(int p,int l,int r){
int mid = l+(r-l)/2,len_black,len_white;
if(arr1[p*2].len_l==(mid-l+1)){
arr1[p].len_l = arr1[p*2+1].len_l+arr1[p*2].len_l;
}
else {
arr1[p].len_l = arr1[p*2].len_l;
}
if(arr1[p*2+1].len_r==r-mid){
arr1[p].len_r = arr1[p*2+1].len_r+arr1[p*2].len_r;
}