rt 题目在这
按照第一篇题解的思路些的,输入样例会停止工作
#include <bits/stdc++.h>
using namespace std;
const int N=1100000;
int n,m,o,x,y,sum[N],la[N];
void pushdown (int k,int l,int r) {
if (la[k]) {
int mid=(r-l)/2;
la[k*2]^=1;
la[k*2+1]^=1;
sum[k*2]=mid-l+1-sum[k*2];
sum[k*2+1]=r-mid-sum[k*2+1];
la[k]=0;
}
}
void update (int k,int l,int r,int x,int y) {
if (x<=l && y>=r) {
la[k]^=1;
sum[k]=(r-l+1)-sum[k];
return;
}
pushdown(k,l,r);
int mid=(r-l+1)/2;
if (x<=mid)
update(k*2,l,mid,x,y);
if (y>mid)
update(k*2+1,mid+1,r,x,y);
sum[k]=sum[k*2]+sum[k*2+1];
}
long long cha (int k,int l,int r,int x,int y) {
if (x<=l && y>=r) {
return sum[k];
}
pushdown(k,l,r);
long long ans=0,mid=(r-l+1)/2;
if (x<=mid)
ans+=cha(k*2,l,mid,x,y);
if (y>mid)
ans+=cha(k*2+1,mid+1,r,x,y);
return ans;
}
int main() {
scanf ("%d%d",&n,&m);
for (int i=1;i<=m;i++){
scanf ("%d%d%d",&o,&x,&y);
if (o==0) {
update(1,1,n,x,y);
} else {
cout <<cha(1,1,n,x,y) <<endl;
}
}
return 0;
}