找不到原因,救我!!!!
/****************************************
作者:
版权:
日期:
*****************************************/
#include<bits/stdc++.h>
#define LL k<<1
#define RR k<<1|1
using namespace std;
const int N = 4e5 + 1;
int n, m ,sumt;
struct Node {
int l, r, sum = 0, lazy = 0;
} t[N];
inline void pushup(int k) {t[k].sum = t[LL].sum + t[RR].sum;}
inline void pushdown(int k,int l,int r){
if(t[k].lazy){
t[LL].lazy^=1;
t[RR].lazy^=1;
int mid=l+r>>1;
t[LL].sum=(mid-l+1)-t[LL].sum;//因为倒过来了
t[RR].sum=(r-mid)-t[RR].sum;
t[k].lazy=0;//下放完成
}
}
inline void build(int k, int l, int r) {
t[k].l = l;
t[k].r = r;
if (l==r)return;
int mid = l + r >> 1;
build(LL, l, mid);
build(RR, mid + 1, r);
}
inline void update(int k,int l,int r){
if(t[k].l <= l && t[k].r <=r){
t[k].sum=(r-l+1)-t[k].sum;
t[k].lazy^=1;
return;
}
pushdown(k,l,r);
int mid=t[k].l+t[k].r>>1;
if(l<=mid)update(LL,l,r);
if(r>mid) update(RR,l,r);
pushup(k);
}
inline int ask(int k,int l,int r){
if(l<=t[k].l && r<=t[k].r)return t[k].sum;
pushdown(k,l,r);
int mid=t[k].l+t[k].r>>1,xx,yy;
if(l <= mid)xx=ask(LL,l,r);
if(mid<r)yy=ask(RR,l,r);
return xx+yy;
}
int main() {
cin>>n>>m;
build(1,1,n);
while(m--){
int type,l,r;
cin>>type>>l>>r;
if(!type){
update(1,l,r);
}else{
cout<<ask(1,l,r)<<'\n';
}
}
return 0;
}