Submission #384006

#TimeUsernameProblemLanguageResultExecution timeMemory
384006danielcm585Snowball (JOI21_ho_t2)C++14
100 / 100
129 ms11972 KiB
#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second

typedef long long ll;
typedef pair<ll,int> ii;

const int N = 2e5;
const ll INF = 1e18;
int n, q;
ll x[N+2], ans[N+2];

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> x[i];
    }
    vector<ii> dl, dr;
    for (int i = 1; i <= n; i++) {
        if (i == 1) dl.push_back({INF,i});
        else dl.push_back({x[i]-x[i-1],i});
        if (i == n) dr.push_back({INF,i});
        else dr.push_back({x[i+1]-x[i],i});
    }
    sort(dl.begin(),dl.end());
    sort(dr.begin(),dr.end());
    ll pl = 0, pr = 0, lf = 0, rg = 0, ps = 0;
    while (q--) {
        ll w; cin >> w;
        ps += w;
        for (; pl < n && dl[pl].fi <= rg-ps; pl++) {
            ans[dl[pl].se] += max(-lf,dl[pl].fi-rg);
        }
        for (; pr < n && dr[pr].fi <= ps-lf; pr++) {
            ans[dr[pr].se] += max(rg,dr[pr].fi+lf);
        }
        lf = min(lf,ps);
        rg = max(rg,ps);
    }
    for (; pl < n; pl++) ans[dl[pl].se] += -lf;
    for (; pr < n; pr++) ans[dr[pr].se] += rg;
    for (int i = 1; i <= n; i++) {
        cout << ans[i] << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...