Submission #974293

#TimeUsernameProblemLanguageResultExecution timeMemory
974293berrSnowball (JOI21_ho_t2)C++17
100 / 100
121 ms17132 KiB
#include <bits/stdc++.h>
using namespace std; 
#define int long long

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
   
    int n, q; cin >> n >> q;

    vector<int> x(n), l(n), r(n);
    vector<int> mi(q+1), ma(q+1);
    for(auto &i: x) cin >> i;
    vector<int> op(q+1);

    for(int i=1; i<=q; i++) cin >> op[i];

    for(int i=1; i<=q; i++){
        op[i]+=op[i-1];
        mi[i]=mi[i-1]; ma[i] =ma[i-1];

        if(op[i] < op[mi[i]]) mi[i]=i;
        if(op[i] > op[ma[i]]) ma[i]=i;
    }

    l[0]=x[0]+op[mi[q]]; r[n-1] = x[n-1]+op[ma[q]];

    for(int i=0; i<n-1; i++){
        int s=-1;

        for(int l=20; l>=0; l--){
            int tmp = s+(1<<l);
            if(tmp >= q) continue;
            if((x[i]+op[ma[tmp]]>=x[i+1]+op[mi[tmp]])) continue;
            s=tmp;
        }

        s++;

        if(x[i]+op[ma[s]]>=x[i+1]+op[mi[s]]){            
            if(ma[s] < mi[s]){
                r[i]=x[i]+op[ma[s]];
                l[i+1]=r[i];
            }
            else{
                l[i+1]=x[i+1]+op[mi[s]];
                r[i]=l[i+1];

            }
        }
        else{

            r[i]=min(x[i+1]+op[mi[s]], x[i]+op[ma[s]]);
            l[i+1]=max(x[i+1]+op[mi[s]], x[i]+op[ma[s]]);
        }
    }

  

    for(int i=0; i<n; i++) cout<<r[i]-l[i]<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...