@[Timing](/space/show?uid=130161)
```cpp
#include<bits/stdc++.h>
#define rt register int
#define gt getchar()
#define int long long
using namespace std;
inline void in(rt &x){
int f=1;char s=gt;
while(!isdigit(s)){if(s=='-')f=-1;s=gt;}
while(isdigit(s)){x=x*10+s-'0';s=gt;}
x*=f;
}
const int _=1e5+10;
int n,m;
struct SegmentTree{
int l,r,sum,add;
#define l(x) tree[x].l
#define r(x) tree[x].r
#define sum(x) tree[x].sum
#define add(x) tree[x].add
}tree[_<<2];
inline bool check(int p){
if(p==1)return 0;
else return 1;
}
inline void build(int p,int l,int r){
l(p)=l,r(p)=r;
if(l==r){sum(p)=0;return;}
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1+1,mid+1,r);
// sum(p)=sum(p<<1)+sum(p<<1+1);
return;
}
inline void spread(int p){
if(add(p))return;
int f=p<<1;
sum(f)=r(f)-l(f)+1-sum(f);
sum(f+1)=r(f+1)-l(f+1)+1-sum(f+1);
add(f+1)=check(add(f+1));
add(f)=check(add(f));
add(p)=0;
return ;
}
inline void change(int p,int l,int r){
if(l<=l(p)&&r>=r(p)){
sum(p)=r(p)-l(p)+1-sum(p);
add(p)=check(add(p));
return;
}
spread(p);
int mid=(l(p)+r(p))>>1;
if(l<=mid)change(p<<1,l,r);
if(r>mid)change(p<<1+1,l,r);
sum(p)=sum(p<<1)+sum(p<<1+1);
return;
}
inline int ask(int p,int l,int r){
if(l<=l(p)&&r>=r(p))return sum(p);
spread(p);
int mid=(l(p)+r(p))>>1;
int val=0ll;
if(l<=mid)val+=ask(p<<1,l,r);
if(r>mid)val+=ask(p<<1+1,l,r);
return val;
}
signed main(){
in(n);in(m);
build(1,1,n);
while(m--){
rt c,l,r;
in(c);in(l);in(r);
if(c==0){
change(1,l,r);
}
else printf("%d\n",ask(1,l,r));
}
return 0;
}
```
by Timing @ 2019-03-10 20:06:41
```cpp
段错误 (核心已转储)
```
by t162 @ 2019-03-10 20:20:41