半个下午了,线段树真*****耗寿命(来自菜狗的哀嚎)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define ll long long
const int Maxn=1e5+10;
int tree[Maxn<<2],lazy[Maxn<<2];
int x,y;
int a;
int ans;
void pushDown(int l,int r,int p)
{
int mid=(l+r)>>1,le=p<<1,ri=p<<1|1;
tree[le]+=lazy[p]*(mid-l+1);
lazy[le]+=lazy[p];
tree[ri]+=lazy[p]*(r-mid);
lazy[ri]+=lazy[p];
lazy[p]=0;
}
void build(int l,int r,int p)
{
if(l==r)
{
tree[p]=0;
return ;
}
ll mid=(l+r)>>1,le=p<<1,ri=p<<1|1;
build(l,mid,le);
build(mid+1,r,ri);
tree[p]=tree[le]+tree[ri];
}
void update(int l,int r,int p)
{
if(x<=l&&r<=y)
{
tree[p]+=(r-l+1);
lazy[p]++;
return ;
}
pushDown(l,r,p);
ll mid=(l+r)>>1,le=p<<1,ri=p<<1|1;
if(x<=mid) update(l,mid,le);
if(y>mid) update(mid+1,r,ri);
tree[p]=tree[le]+tree[ri];
}
ll query(int l,int r,int p)
{
if(l==r) return tree[p]&=1;
pushDown(l,r,p);
ll mid=(l+r)>>1,le=p<<1,ri=p<<1|1;
if(x<=mid) return query(l,mid,le);
return query(mid+1,r,ri);
}
int main()
{
int n,m;cin>>n>>m;
//init
build(1,n,1);
//½¨Ê÷
while(m--)
{
int t;cin>>t;
if(t==1)
{
cin>>x>>y;
update(1,n,1);
}
if(t==2)
{
cin>>a;
cout<<query(1,n,1)<<endl;
}
}
//´¦Àí
return 0;
}
/*
in1:
20 10
1 1 10
2 6
2 12
1 5 12
2 6
2 15
1 6 16
1 11 17
2 12
2 6
out1:
1
0
0
0
1
1
*/