分块板子,100分但是没AC
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m;
int c,x,y;
bool a[N];
int st[N],ed[N],pos[N],add[N],sum[N],block,t;
void build(){
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++)pos[i]=(i-1)/block+1;
for(int i=1;i<=t;i++){
for(int j=st[i];j<=ed[i];j++)sum[i]+=a[j];
}
}
void change(int L,int R){
int p=pos[L],q=pos[R];
if(p==q){
for(int i=L;i<=R;i++)a[i]=(a[i]+1)%2;
}
else{
for(int i=p+1;i<=q-1;i++)add[i]++;
for(int i=L;i<=ed[p];i++)a[i]=(a[i]+1)%2;
for(int i=st[q];i<=R;i++)a[i]=(a[i]+1)%2;
}
}
int query(int L,int R){
int ans=0;
for(int i=L;i<=R;i++){
int p=pos[i];
if((a[i]+add[p])%2==1)ans++;
}
return ans;
}
int main(){
cin>>n>>m;
build();
while(m--){
cin>>c>>x>>y;
if(c==0)change(x,y);
if(c==1)cout<<query(x,y)<<endl;
}
return 0;
}