#include "teams.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int maxn=5e5+10;
vector<int>v[maxn];
int seg[4*maxn], lz[4*maxn], n;
void build(int id, int ini, int fim){
// cerr << "> " << ini << ' ' << fim << endl;
seg[id]=0; lz[id]=-1;
if(ini==fim) return;
int mid=(ini+fim)/2, e=2*id, d=2*id+1;
build(e,ini,mid); build(d,mid+1,fim);
}
void refresh(int id, int ini, int fim){
if(lz[id]==-1) return;
if(ini!=fim){
int e=2*id, d=2*id+1;
lz[e]=lz[d]=lz[id];
}
seg[id]=lz[id];
lz[id]=-1;
}
void update_set(int id, int ini, int fim, int l, int r){
refresh(id,ini,fim);
if(ini>r||fim<l) return;
if(l<=ini&&fim<=r){
lz[id]=0;
refresh(id,ini,fim);
return;
}
int mid=(ini+fim)/2, e=2*id, d=2*id+1;
update_set(e,ini,mid,l,r); update_set(d,mid+1,fim,l,r);
seg[id]=seg[e]+seg[d];
}
void update_sum(int id, int ini, int fim, int cara, int val){
refresh(id,ini,fim);
if(ini==fim){
seg[id]+=val;
return;
}
int mid=(ini+fim)/2, e=2*id, d=2*id+1;
if(cara<=mid) update_sum(e,ini,mid,cara,val);
else update_sum(d,mid+1,fim,cara,val);
seg[id]=seg[e]+seg[d];
}
int query_sum(int id, int ini, int fim, int l, int r){
refresh(id,ini,fim);
if(ini>r||fim<l) return 0;
if(l<=ini&&fim<=r) return seg[id];
int mid=(ini+fim)/2, e=2*id, d=2*id+1;
return query_sum(e,ini,mid,l,r)+query_sum(d,mid+1,fim,l,r);
}
int query(int id, int ini, int fim, int l, int r, int qtd){
refresh(id,ini,fim);
if(ini==fim) return ini;
int mid=(ini+fim)/2, e=2*id, d=2*id+1;
refresh(e,ini,mid); refresh(d,mid+1,fim);
if(seg[e]>=qtd) return query(e,ini,mid,l,r,qtd);
return query(d,mid+1,fim,l,r,qtd-seg[e]);
}
void init(int N, int A[], int B[]){
for(int i=0;i<N;i++) v[A[i]].push_back(B[i]);
n=N;
}
int can(int M, int K[]){
// cerr << "query" << endl;
sort(K,K+M);
build(1,1,n);
int id=0;
for(int i=1;i<=n;i++){
// cerr << "! " << i << endl;
for(int x : v[i]) update_sum(1,1,n,x,1);
while(id<M&&i==K[id]){
if(query_sum(1,1,n,i,n)<i) return 0;
int at=query(1,1,n,i,n,i);
assert(query_sum(1,1,n,i,at)>=i);
int subtrai=i-query_sum(1,1,n,i,at-1);
assert(subtrai);
// cerr << "? " << at << ' ' << subtrai << endl;
update_set(1,1,n,i,at-1); update_sum(1,1,n,at,-subtrai);
id++;
}
}
return 1;
}