#include<bits/stdc++.h>
using namespace std;
int n,m,a[800040];
bool tag[800040];
void push_up(int p){
a[p]=a[p<<1]+a[p<<1|1];
}
void f(int p,int l,int r){
tag[p]=~tag[p];
a[p]=(r-l+1)-a[p];
}
void push_down(int p,int l,int r){
if(tag[p]==0)return ;
int mid=l+r>>1;
f(p<<1,l,mid);
f(p<<1|1,mid+1,r);
tag[p]=0;
}
void modify(int ll,int rr,int l,int r,int p){
if(ll<=l&&r<=rr){
tag[p]=~tag[p];
a[p]=(r-l+1)-a[p];
return ;
}
push_down(p,l,r);
int mid=l+r>>1;
if(ll<=mid)modify(ll,rr,l,mid,p<<1);
if(rr>mid)modify(ll,rr,mid+1,r,p<<1|1);
push_up(p);
}
int query(int ll,int rr,int l,int r,int p){
if(ll<=l&&r<=rr){
return a[p];
}
push_down(p,l,r);
int mid=l+r>>1;
return (ll<=mid?query(ll,rr,l,mid,p<<1):0)+(rr>mid?query(ll,rr,mid+1,r,p<<1|1):0);
}
int main(){
cin>>n>>m;
while(m--){
int op,x,y;
cin>>op>>x>>y;
if(op==0){
modify(x,y,1,n,1);
}else{
cout<<query(x,y,1,n,1)<<'\n';
}
}
}
``````#include<bits/stdc++.h>
using namespace std;
int n,m,a[800040];
bool tag[800040];
void push_up(int p){
a[p]=a[p<<1]+a[p<<1|1];
}
void f(int p,int l,int r){
tag[p]=~tag[p];
a[p]=(r-l+1)-a[p];
}
void push_down(int p,int l,int r){
if(tag[p]==0)return ;
int mid=l+r>>1;
f(p<<1,l,mid);
f(p<<1|1,mid+1,r);
tag[p]=0;
}
void modify(int ll,int rr,int l,int r,int p){
if(ll<=l&&r<=rr){
tag[p]=~tag[p];
a[p]=(r-l+1)-a[p];
return ;
}
push_down(p,l,r);
int mid=l+r>>1;
if(ll<=mid)modify(ll,rr,l,mid,p<<1);
if(rr>mid)modify(ll,rr,mid+1,r,p<<1|1);
push_up(p);
}
int query(int ll,int rr,int l,int r,int p){
if(ll<=l&&r<=rr){
return a[p];
}
push_down(p,l,r);
int mid=l+r>>1;
return (ll<=mid?query(ll,rr,l,mid,p<<1):0)+(rr>mid?query(ll,rr,mid+1,r,p<<1|1):0);
}
int main(){
cin>>n>>m;
while(m--){
int op,x,y;
cin>>op>>x>>y;
if(op==0){
modify(x,y,1,n,1);
}else{
cout<<query(x,y,1,n,1)<<'\n';
}
}
}