求助 样例输出0;
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long l,r,sum;
bool rag;
}t[1000010];
int n,m,x,y,z;
void push_down(int rt)
{
if(t[rt].rag)
{
int mid=t[rt].l+t[rt].r>>1;
t[rt<<1].sum=(t[rt<<1].r-t[rt<<1].r+1)-t[rt<<1].sum;
t[rt<<1|1].sum=(t[rt<<1|1].r-t[rt<<1|1].r+1)-t[rt<<1|1].sum;
t[rt<<1].rag^=1;
t[rt<<1|1].rag^=1;
t[rt].rag=0;
}
return;
}
void build(int rt,int l,int r)
{
t[rt].l=l;
t[rt].r=r;
if(l==r)
{
t[rt].sum=0;
return;
}
int mid=l+r>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
t[rt].sum=t[rt<<1].sum+t[rt<<1|1].sum;
return;
}
void revise(int l,int r,int rt)
{
if(l>=t[rt].l&&t[rt].r<=r)
{
t[rt].sum=(t[rt].r-t[rt].l+1)-t[rt].sum;
t[rt].rag^=1;
return;
}
int mid=l+r>>1;
push_down(rt);
if(t[rt<<1].l <=r||t[rt<<1].r >=l) revise(l,r,rt<<1);
if(t[rt<<1|1].l<=r||t[rt<<1|1].r>=l) revise(l,r,rt<<1|1);
return;
}
long long clac(int l,int r,int rt)
{
if(l>=t[rt].l&&t[rt].r<=r)
{
return t[rt].sum;
}
push_down(rt);
long long kk=0;
int mid=l+r>>1;
if(t[rt<<1].l<=r||t[rt<<1].r>=l)
kk+=clac(l,mid,rt<<1);
if(t[rt<<1|1].l<=r||t[rt<<1|1].r>=l)
kk+=clac(mid+1,r,rt<<1|1);
return kk;
}
int main()
{
cin>>n>>m;
build(1,1,n);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(x==0)
{
revise(y,z,1);
}
else cout<<clac(y,z,1)<<endl;
}
}