const int MAXN=2e5+5;
int a[MAXN],b[MAXN];
int lef[MAXN<<2],rig[MAXN<<2],s[MAXN<<2],tag[MAXN<<2];
struct Node{
int a,b;
}mv[MAXN<<2];
Node Max(Node L,Node R){
if(L.a>R.a)
return L;
else
return R;
}
void push_tag(int k){
mv[k].b^=1;
tag[k]^=1;
}
void push_down(int k){
if(tag[k]){
push_tag(k<<1);
push_tag(k<<1|1);
tag[k]=0;
}
}
int query(int k,int a,int b){
if(lef[k]==rig[k])
return mv[k].a>=a&&mv[k].b!=b;
push_down(k);
if(a<=mv[k<<1].a)
return query(k<<1,a,b)+s[k];
else
return query(k<<1|1,a,b);
}
void push_up(int k){
mv[k]=Max(mv[k<<1],mv[k<<1|1]);
s[k]=query(k<<1|1,mv[k<<1].a,mv[k<<1].b);
}
void build(int k,int L,int R){
lef[k]=L,rig[k]=R;
int M=L+R>>1;
if(L==R){
mv[k]=Node{a[M],b[M]};
return;
}
build(k<<1,L,M);
build(k<<1|1,M+1,R);
push_up(k);
}
Node query_max(int k,int L,int R){
if(L<=lef[k]&&rig[k]<=R)
return mv[k];
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=R)
return query_max(k<<1,L,R);
else if(mid<L)
return query_max(k<<1|1,L,R);
else
return Max(query_max(k<<1,L,R),query_max(k<<1|1,L,R));
}
int query(int k,int L,int R,int a,int b){
if(L<=lef[k]&&rig[k]<=R)
return query(k,a,b);
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=R)
return query(k<<1,L,R,a,b);
else if(mid<L)
return query(k<<1|1,L,R,a,b);
else{
Node t=query_max(k<<1,L,R);
if(a<=t.a)
return query(k<<1,L,R,a,b)+query(k<<1|1,L,R,t.a,t.b);
else
return query(k<<1|1,L,R,a,b);
}
}
void update1(int k,int pos,int v){
if(lef[k]==rig[k]){
mv[k].a=v;
return;
}
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=pos)
update1(k<<1,pos,v);
else
update1(k<<1|1,pos,v);
push_up(k);
}
void update2(int k,int L,int R){
if(L<=lef[k]&&rig[k]<=R){
push_tag(k);
return;
}
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=L)
update2(k<<1,L,R);
if(mid<R)
update2(k<<1|1,L,R);
push_up(k);
}
int main(){
int n=read_int();
_rep(i,1,n)a[i]=read_int();
_rep(i,1,n)b[i]=read_int();
build(1,1,n);
int q=read_int();
while(q--){
int opt=read_int(),t1=read_int(),t2=read_int();
if(opt==1)
update1(1,t1,t2);
else if(opt==2)
update2(1,t1,t2);
else{
if(t1==t2)
enter(0);
else{
Node t=query_max(1,t1,t1);
enter(query(1,t1+1,t2,t.a,t.b));
}
}
}
return 0;
}