RT。
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define pir pair<int,int>
#define fs first
#define sc second
const int MAXN=5e5+5;
int n,q,a[MAXN],p[MAXN],cnt,bl[MAXN],id[MAXN];
pir opt[MAXN];
vector<pir>v;
struct sgt
{
#define mid (l+r)/2
#define lson now*2,l,mid
#define rson now*2+1,mid+1,r
int tg[MAXN*4],minn[MAXN*4];
il void pushup(int now)
{
minn[now]=min(minn[now*2],minn[now*2+1]);
}
il void pushdown(int now,int l,int r)
{
if(tg[now])
{
tg[now*2]+=tg[now];
tg[now*2+1]+=tg[now];
minn[now*2]+=tg[now];
minn[now*2+1]+=tg[now];
tg[now]=0;
}
}
il void build(int now,int l,int r)
{
if(l==r)
{
minn[now]=a[l];
return;
}
build(lson);
build(rson);
pushup(now);
}
il void upd(int now,int l,int r,int gl,int gr,int val)
{
if(gl<=l&&r<=gr)
{
minn[now]+=val;
tg[now]+=val;
return;
}
pushdown(now,l,r);
if(gl<=mid)upd(lson,gl,gr,val);
if(gr>mid)upd(rson,gl,gr,val);
pushup(now);
}
il int query(int now,int l,int r,int gl,int gr)
{
if(gl<=l&&r<=gr)return minn[now];
int ans=2e9;
pushdown(now,l,r);
if(gl<=mid)ans=min(query(lson,gl,gr),ans);
if(gr>mid)ans=min(query(rson,gl,gr),ans);
return ans;
}
}tr;
int main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)cin>>p[i];
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i])
{
bl[++cnt]=p[i];
id[cnt]=i;
}
}
int flag=0;
for(int i=1;i<=n;i++)if(!a[i])
{
flag=1;
cout<<"NO\n";
break;
}
if(!flag)cout<<"YES\n";
tr.build(1,1,n);
for(int i=1;i<=q;i++)
{
int op,x,y;
cin>>op;
if(op==1)
{
cin>>x>>y;
int l=id[lower_bound(bl+1,bl+1+cnt,x)-bl];
int r=id[upper_bound(bl+1,bl+1+cnt,y)-bl-1];
opt[i]=pir(l,r);
tr.upd(1,1,n,l,r,1);
}
else
{
cin>>x;
int l=opt[x].fs,r=opt[x].sc;
tr.upd(1,1,n,l,r,-1);
}
if(tr.minn[1]>=1)cout<<"YES\n";
else cout<<"NO\n";
}
}