#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pf push_front
#define F first
#define S second
#define IShowSpeed ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define all(a) a.begin(),a.end()
const int N=3e5+10;
const int mod=1e9+7;
const ll inf=1e18+228;
const int dx[] = {-1, 0, 0, 1};
const int dy[] = {0, -1, 1, 0};
ll a[N],b[N],l[N],r[N],x[N],L[N],R[N],mi[N],t[4*N],md[4*N],ans[N];
vector<ll>g[N],mids[N];
void push(ll v, ll tl, ll tr) {
if(tl != tr && md[v]) {
ll mid = (tl + tr) >> 1;
md[v+v] += md[v];
md[v+v+1] += md[v];
t[v+v] += md[v] * (mid - tl + 1);
t[v+v+1] += md[v] * (tr - mid);
md[v] = 0;
}
}
void upd(ll v, ll tl, ll tr, ll l, ll r, ll x) {
if(l > tr || tl > r) return;
if(l <= tl && tr <= r) {
md[v] += x;
t[v] += md[v] * (tr - tl + 1);
push(v,tl,tr);
return;
}
push(v,tl,tr);
ll mid = (tl + tr) >> 1;
upd(v+v,tl,mid,l,r,x);
upd(v+v+1,mid+1,tr,l,r,x);
t[v] = t[v+v] + t[v+v+1];
}
ll get(ll v, ll tl, ll tr, ll pos) {
if(tl == tr) return t[v];
push(v,tl,tr);
ll mid = (tl + tr) >> 1;
if(pos <= mid) return get(v+v,tl,mid,pos);
else return get(v+v+1,mid+1,tr,pos);
}
int main()
{
IShowSpeed
ll tt=1;
//cin>>tt;
while(tt--)
{
ll n,m,q;
cin>>n>>m;
for(int i=1;i<=m;i++) {
cin>>a[i];
g[a[i]].pb(i);
}
for(int i=1;i<=n;i++) cin>>b[i];
cin>>q;
for(int i=1;i<=q;i++) cin>>l[i]>>r[i]>>x[i];
for(int i=1;i<=n;i++) {
L[i] = 1;
R[i] = q;
mi[i] = (q+1) >> 1;
}
while(true) {
bool chk = 0;
for(int i=1;i<=m*4;i++) t[i] = md[i] = 0ll;
for(int i=1;i<=q;i++) mids[i].clear();
for(int i=1;i<=n;i++) {
if(L[i] <= R[i]) {
chk = 1;
mi[i] = (L[i] + R[i]) >> 1;
mids[mi[i]].pb(i);
}
}
if(!chk) break;
for(int i=1;i<=q;i++) {
if(l[i] <= r[i]) upd(1,1,m,l[i],r[i],x[i]);
else {
upd(1,1,m,l[i],m,x[i]);
upd(1,1,m,1,r[i],x[i]);
}
for(ll x: mids[i]) {
ll sum = 0;
for(ll y: g[x]) {
sum += get(1,1,m,y);
if(sum >= b[x]) break;
}
if(sum >= b[x]) ans[x] = i,R[x] = i - 1;
else L[x] = i + 1;
}
}
}
for(int i=1;i<=n;i++) {
if(!ans[i]) cout<<"NIE\n";
else cout<<ans[i]<<"\n";
}
}
}
/*
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |