#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #define maxn 100010 using namespace std; int n,m,num; struct node { int lc,rc; int l,r; int sum,bj; }t[maxn*2+100]; void Build(int ll,int rr) { int k=++num; t[k].l=ll;t[k].r=rr; if(ll==rr)return; t[k].lc=num+1; Build(ll,(ll+rr)/2); t[k].rc=num+1; Build((ll+rr)/2+1,rr); } void update(int k) { t[t[k].lc].sum=abs(t[t[k].lc].r-t[t[k].lc].l+1-t[t[k].lc].sum); t[t[k].rc].sum=abs(t[t[k].rc].r-t[t[k].rc].l+1-t[t[k].rc].sum); t[t[k].lc].bj=!t[t[k].lc].bj; t[t[k].rc].bj=!t[t[k].rc].bj; t[k].bj=0; } void change(int k,int ll,int rr) { if(ll<=t[k].l&&rr>=t[k].r) { t[k].bj=!t[k].bj; t[k].sum=abs(t[k].r-t[k].l+1-t[k].sum); return; } if(t[k].bj)update(k); int mid=(t[k].l+t[k].r)/2; if(rr<=mid)change(t[k].lc,ll,rr); else if(ll>mid)change(t[k].rc,ll,rr); else { change(t[k].lc,ll,mid); change(t[k].rc,mid+1,rr); } t[k].sum=t[t[k].lc].sum+t[t[k].rc].sum; } int find(int k,int ll,int rr) { if(ll<=t[k].l&&rr>=t[k].r)return t[k].sum; if(t[k].bj)update(k); int ans=0; int mid=(t[k].l+t[k].r)/2; if(rr<=mid)ans+=find(t[k].lc,ll,rr); else if(ll>mid)ans+=find(t[k].rc,ll,rr); else ans+=find(t[k].lc,ll,mid)+find(t[k].rc,mid+1,rr); return ans; } int main() { scanf("%d",&n); Build(1,n); scanf("%d",&m); int x,y,z; for(int i=1;i<=m;i++) { scanf("%d",&x); if(x==0) { scanf("%d%d",&y,&z); change(1,y,z); } if(x==1) { scanf("%d%d",&y,&z); printf("%d ",find(1,y,z)); } } return 0; }