#include<bits/stdc++.h>
#define lc p<<1
#define rc p<<1|1
using namespace std;
const int N=1e5+5;
int op,x,y,k,n,m;
struct Segment_tree{
int l,r,sum,add;
}tr[4*N];
void pushup(int p){
tr[p].sum=tr[lc].sum+tr[rc].sum;
}
void pushdown(int p){
if(tr[p].add){
tr[lc].sum+=(tr[lc].r-tr[lc].l+1);
tr[rc].sum+=(tr[rc].r-tr[rc].l+1);
tr[lc].add+=tr[p].add;
tr[rc].add+=tr[p].add;
tr[p].add=0;
}
}
void build(int p,int l,int r){
tr[p].l=l,tr[p].r=r,tr[p].add=0;
if(l==r){
tr[p].sum=0;
return;
}
int mid=l+r>>1;
build(lc,l,mid);
build(rc,mid+1,r);
pushup(p);
}
void change(int p,int x,int y){
if(tr[p].l>=x && tr[p].r<=y){
tr[p].add++;
tr[p].sum+=(tr[p].r-tr[p].l+1);
return;
}
pushdown(p);
int mid=tr[p].l+tr[p].r>>1;
if(x<=mid) change(lc,x,y);
if(y>mid) change(rc,x,y);
pushup(p);
}
int query(int p,int k){
// printf("%d %d\n",p,k);
if(tr[p].l==k && tr[p].r==k){
return tr[p].sum;
}
int mid=tr[p].l+tr[p].r>>1;
pushdown(p);
if(k<=mid) return query(lc,k);
else return query(rc,k);
}
int main(){
scanf("%d%d",&n,&m);
build(1,1,n);
while(m--){
scanf("%d",&op);
if(op==1){
scanf("%d%d",&x,&y);
change(1,x,y);
}
else{
scanf("%d",&k);
printf("%d\n",query(1,k)&1);
}
}
return 0;
}
悬关,万分感谢!