Submission #1327724

#TimeUsernameProblemLanguageResultExecution timeMemory
1327724ivan_alexeevSnowball (JOI21_ho_t2)C++20
100 / 100
108 ms11492 KiB
#include <bits/stdc++.h>

using namespace std;

#ifndef lisie_bimbi
#define endl '\n'
#pragma GCC optimize("O3")
#pragma GCC target("avx,avx2,bmi2,fma")
#endif

using ll = long long;
const ll inf = 1'000'000'000'000'000'000;

void solve(){
    int n, q;
    cin >> n >> q;
    vector<ll> x(n), w(q);
    for(int i = 0; i < n; i++){
        cin >> x[i];
    }
    for(int i = 0; i < q; i++){
        cin >> w[i];
    }
    vector<ll> shift(q + 1), mn(q + 1), mx(q + 1);
    for(int i = 0; i < q; i++){
        shift[i + 1] = shift[i] + w[i]; 
    }
    mn[0] = mx[0] = 0;
    for(int i = 1; i <= q; i++){
        mn[i] = min(mn[i - 1], shift[i]);
    }
    for(int i = 1; i <= q; i++){
        mx[i] = max(mx[i - 1], shift[i]);
    }
    vector<ll> ans(n);
    for(int i = 0; i < n - 1; i++){
        int l = 0, r = q + 1;
        while(l + 1 != r){
            int m = (l + r) / 2;
            if(x[i] + mx[m] < x[i + 1] + mn[m]){
                l = m;
            }else{
                r = m;
            }
        }
        ll z;
        if(r > q){
            z = mx[l];
        }else{
            z = min(mx[r], x[i + 1] - x[i] + mn[l]);
        }
        ans[i] += z;
    }
    ans[n - 1] += mx[q];
    for(int i = n - 1; i > 0; i--){
        int l = 0, r = q + 1;
        while(l + 1 != r){
            int m = (l + r) / 2;
            if(x[i] + mn[m] > x[i - 1] + mx[m]){
                l = m;
            }else{
                r = m;
            }
        }
        ll z;
        if(r > q){
            z = -mn[l];
        }else{
            z = min(-mn[r], x[i] - x[i - 1] - mx[l]);
        }
        ans[i] += z;
    }
    ans[0] += -mn[q];
    for(int i = 0; i < n; i++){
        cout << ans[i] << endl;
    }
    cout << endl;
}

signed main(){
#ifdef lisie_bimbi
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
#endif
    cin.tie(nullptr)->sync_with_stdio(false);
    int t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...