#include<bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
int lz[1200000];
int cnt[1200000];
struct st
{
    int l,r,x;
};
void pushlz(int l,int r,int i)
{
    cnt[i]+=lz[i];
    if(l!=r)
    {
        lz[i*2]+=lz[i];
        lz[i*2+1]+=lz[i];
    }
    lz[i]=0;
}
void update(int l,int r,int i,int ql,int qr,int val)
{
    pushlz(l,r,i);
    if(qr<l||ql>r)
    return;
    if(ql<=l&&qr>=r)
    {
        lz[i]+=val;
        pushlz(l,r,i);
        return;
    }
    int mid=(l+r)/2;
    update(l,mid,i*2,ql,qr,val);
    update(mid+1,r,i*2+1,ql,qr,val);
}
int ans;
void query(int l,int r,int i,int index)
{
    pushlz(l,r,i);
    if(index<l||index>r)
    return;
    if(l==r)
    {
        ans=cnt[i];
        return;
    }
    int mid=(l+r)/2;
    query(l,mid,i*2,index);
    query(mid+1,r,i*2+1,index);
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,m;
    cin>>n>>m;
    vector<int> p[300010];
    for(int i=1;i<=m;i++)
    {
        int x;
        cin>>x;
        p[x].push_back(i);
    }
    int a[n+1],ll[n+1],rr[n+1];
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int k;
    cin>>k;
    for(int i=1;i<=n;i++)
    {
        ll[i]=0;
        rr[i]=k+1;
    }
    st e[k+1];
    for(int i=1;i<=k;i++)
    {
        int l,r,x;
        cin>>l>>r>>x;
        e[i]={l,r,x};
    }
    int bb=1;
    while(bb)
    {
        bb=0;
        vector<pair<int,int>> qq;
        for(int i=1;i<=n;i++)
        {
            if(ll[i]<rr[i])
            {
                bb=1;
                qq.push_back({(ll[i]+rr[i])/2,i});
            }
        }
        if(!bb)
        break;
        sort(qq.begin(),qq.end());
        int j=1;
        memset(cnt,0,sizeof cnt);
        memset(lz,0,sizeof lz);
        for(int i=0;i<qq.size();i++)
        {
            int mid=qq[i].f,index=qq[i].s;
            while(j<=k&&j<=mid)
            {
                int l=e[j].l,r=e[j].r,x=e[j].x;
                j++;
                if(l<=r)
                {
                    update(1,m,1,l,r,x);
                }
                else
                {
                    update(1,m,1,l,m,x);
                    update(1,m,1,1,r,x);
                }
            }
            int sum=0;
            for(auto y:p[index])
            {
                query(1,m,1,y);
                sum+=ans;
            }
            if(sum>=a[index])
            {
                rr[index]=mid;
            }
            else
            {
                ll[index]=mid+1;
            }
            //cout<<index<<" "<<sum<<" "<<mid<<endl;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(ll[i]==k+1)
        cout<<"NIE"<<'\n';
        else
        cout<<ll[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... |