Submission #1224791

#TimeUsernameProblemLanguageResultExecution timeMemory
1224791TitanicXDzzMeteors (POI11_met)C++20
0 / 100
59 ms131072 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[300010];
int l[300010];
int r[300010];
int ll[300010];
int rr[300010];
int val[300010];
vector<int> v[300010];
queue<int> q[300010];
int sumi[300010];
int m;
void update(int idx,int val){
sumi[idx]+=val;
 if(idx+(idx&(-idx))<=m)
    update(idx+(idx&(-idx)),val);
 return;
}
int read(int idx){
 if(idx-(idx&(-idx))>=1)
    return(sumi[idx]+read(idx-(idx&(-idx))));
 return(sumi[idx]);
}
signed main(){
 int n;
 cin>>n>>m;
 for(int i=1;i<=m;i++){
    int x;
    cin>>x;
    v[x].push_back(i);
 }
 for(int i=1;i<=n;i++)
    cin>>a[i];
 int k;
 cin>>k;
 for(int i=1;i<=k;i++){
    cin>>l[i]>>r[i]>>val[i];
 }
 for(int i=1;i<=n;i++){
    ll[i]=1;
    rr[i]=k+1;
    q[(ll[i]+rr[i])/2].push(i);
 }
 for(int iii=1;iii<=20;iii++){
    for(int i=0;i<=m+1;i++){
        sumi[i]=0;
    }
    for(int i=1;i<=k;i++){
        if(l[i]<=r[i]){
         update(l[i],val[i]);
         update(r[i]+1,-val[i]);
        }
        else{
            update(l[i],val[i]);
            update(1,val[i]);
            update(r[i]+1,-val[i]);
        }
        while(q[i].empty()==0){
            int sumi=0;
            for(auto g:v[q[i].front()])
                sumi+=read(g);

            if(sumi<a[q[i].front()])
                ll[q[i].front()]=i+1;
            else
                rr[q[i].front()]=i;
            if(ll[q[i].front()]<rr[q[i].front()])
            q[(ll[q[i].front()]+rr[q[i].front()])/2].push(q[i].front());
            q[i].pop();
        }
    }
 }
 for(int i=1;i<=n;i++){
    if(ll[i]>k)
        cout<<"NIE\n";
    else
        cout<<ll[i]<<endl;
 }
 return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...