#include<bits/stdc++.h>
#define int __int128
#define endl '\n'
using namespace std;
int n,m,k;
int t[300010];
int lowbit(int x){return x&(-x);}
void upd(int x,int p)
{
while(x<=m)
{
t[x]+=p;
x+=lowbit(x);
}
}
int calc(int x)
{
int ans=0;
while(x)
{
ans+=t[x];
x-=lowbit(x);
}
return ans;
}
vector<int>id_space[300010];
struct Rain{
int l,r,a;
}R[300010];
struct Query{
int id,l,r,mid;
}q[300010];
int need[300010];
int check()
{
for ( int i = 1 ; i <= n ; i++ )
{
if(q[i].l<q[i].r)
{
return 1;
}
}
return 0;
}
int cmp(Query p,Query q)
{
return p.mid<q.mid;
}
int ans[300010];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
long long readnum;
cin >> readnum;
n=readnum;
cin >> readnum;
m=readnum;
for ( int i = 1 ; i <= m ; i++ )
{
cin >> readnum;
int x=readnum;
id_space[x].push_back(i);
}
for ( int i = 1 ; i <= n ; i++ )
{
cin >> readnum;
need[i]=readnum;
}
cin >> readnum;
k=readnum;
for ( int i = 1 ; i <= k ; i++ )
{
cin >> readnum;
R[i].l=readnum;
cin >> readnum;
R[i].r=readnum;
cin >> readnum;
R[i].a=readnum;
}
for ( int i = 1 ; i <= n ; i++ )
{
q[i].id=i;
q[i].l=1;
q[i].r=k;
}
while(check())
{
memset(t,0,sizeof(t));
for ( int i = 1 ; i <= n ; i++ )
{
q[i].mid=(q[i].l+q[i].r)/2;
}
sort(q+1,q+1+n,cmp);
int tot=1;
for ( int i = 1 ; i <= n ; i++ )
{
while(tot<=q[i].mid)
{
int l=R[tot].l;
int r=R[tot].r;
int a=R[tot].a;
if(l<=r)
{
upd(l,a);
upd(r+1,-a);
}else{
upd(l,a);
upd(1,a);
upd(r+1,-a);
}
tot++;
}
int cnt=0,cn=q[i].id;
for ( int j = 0 ; j < id_space[cn].size() ; j++ )
{
int id=id_space[cn][j];
cnt+=calc(id);
}
if(cnt>=need[cn])
{
q[i].r=q[i].mid;
}else{
q[i].l=q[i].mid+1;
}
}
}
for ( int i = 1 ; i <= n ; i++ )
{
if(q[i].l==q[i].r)
{
ans[q[i].id]=q[i].r;
}else{
ans[q[i].id]=-1;
}
}
for ( int i = 1 ; i <= n ; i++ )
{
if(ans[i]==-1)
{
cout << "NIE" <<endl;
}else{
long long output=ans[i];
cout << output << endl;
}
}
return 0;
}
Link