求一份hack数据
#include<iostream>
using namespace std;
const int N=2*1e5+10;
struct node{
int l,r;
int v;//0表示没有,1表示确定,2表示不确定
}tr[N*4];
int n,q;
int fuck;
void pushup(int u){
if(tr[u*2].v==1||tr[u*2+1].v==1)tr[u].v=1;
if(tr[u*2].v==0&&tr[u*2+1].v==0)tr[u].v=0;
}
void build(int u,int l,int r){
if(l==r)tr[u]={l,r,2};
else{
tr[u]={l,r,2};
int mid=(l+r)/2;
build(u*2,l,mid);
build(u*2+1,mid+1,r);
}
}
void pushdown(int u){
if(tr[u].v==1){
if(tr[u*2].v==0)tr[u*2+1].v=1;
if(tr[u*2+1].v==0)tr[u*2].v=1;
}
if(tr[u].v==0)tr[u*2].v=0,tr[u*2+1].v=0;
}
void modify(int u,int l,int r,int v){
if(tr[u].l>=l&&tr[u].r<=r)tr[u].v=v;
else{
pushdown(u);
int mid=(tr[u].l+tr[u].r)/2;
if(l<=mid)modify(u*2,l,r,v);
if(r>mid)modify(u*2+1,l,r,v);
pushup(u);
}
}
int query(int u,int l,int r){
int p=0;
if(tr[u].l==l&&tr[u].r==r)return tr[u].v;
else if(tr[u].l==tr[u].r)p=1;
else{
pushdown(u);
int mid=(tr[u].l+tr[u].r)/2;
int v=0;
if(l<=mid)v=query(u*2,l,r);
if(r>mid)v=query(u*2+1,l,r);
return v;
}
}
int main(){
cin>>n>>q;
build(1,1,n);
while(q--){
int k,a,b,c;
cin>>k;
if(k==1){
cin>>a;
int p=query(1,a,a);
if(p==2)cout<<"N/A"<<endl;
if(p==1)cout<<"YES"<<endl;
if(p==0)cout<<"NO"<<endl;
}
else{
cin>>a>>b>>c;
modify(1,a,b,c);
}
}
return 0;
}