只对了第二个点qwq
#include<bits/stdc++.h>
using namespace std;
const int inf=1e5+7;
int n,m,block,t,op,l,r;
bool a[inf],tag[1145];
int st[1145],ed[1145];
int id[inf],sum[1145];
void remake(int n){
block=sqrt(n);
t=n/block;
if(n%block)++t;
for(int i=1;i<=t;++i){
st[i]=(i-1)*block+1;
ed[i]=i*block;
}ed[t]=n;
for(int i=1;i<=n;++i){
id[i]=(i-1)/block+1;
}
}
void add(int l,int r){
int p=id[l],q=id[r];
if(p==q){
for(;l<=r;++l){
sum[p]-=a[l];
a[l]^=1;
sum[p]+=a[l];
}
}
else{
for(;l<=ed[p];++l){
sum[p]-=a[l];
a[l]^=1;
sum[p]+=a[l];
}
for(;r>=st[q];--r){
sum[q]-=a[r];
a[r]^=1;
sum[q]+=a[r];
}
++p,--q;
for(;p<=q;++p){
sum[p]=block-sum[p];
tag[p]^=1;
}
}
}
int query(int l,int r){
int p=id[l],q=id[r],rt=0;
if(p==q){
for(;l<=r;++l)
rt+=a[l]^tag[p];
}
else{
for(;l<=ed[p];++l)
rt+=a[l]^tag[p];
for(;r>=st[q];--r)
rt+=a[r]^tag[q];
++p,--q;
for(;p<=q;++p)
rt+=sum[p];
}
return rt;
}
int main(){
ios::sync_with_stdio(0);
cin>>n>>m;
remake(n);
while(m--){
cin>>op>>l>>r;
if(op==0){
add(l,r);
}
else if(op==1){
cout<<query(l,r)<<endl;
}
}
return 0;
}