Submission #1359139

#TimeUsernameProblemLanguageResultExecution timeMemory
1359139kantaponzSnowball (JOI21_ho_t2)C++20
100 / 100
60 ms9912 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long

const int nx = 2e5 + 5;
const ll inf = 1e18;

int n, q;
ll x[nx];
ll hi, lo, cur;
ll ans[nx];
vector<tuple<ll,ll,int>> v;


int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    cin >> n >> q;
    x[0] = -inf;
    x[n + 1] = inf;
    for (int i = 1; i <= n; i++) {
        cin >> x[i];
    }
    while (q--) {
        ll w; cin >> w;
        cur += w;
        if (cur > hi) hi = cur, v.emplace_back(hi - lo, hi, 1);
        if (cur < lo) lo = cur, v.emplace_back(hi - lo, hi, 2);
    }
    for (int i = 0; i <= n; i++) {
        ll gap = x[i + 1] - x[i];
        if (hi - lo <= gap) {
            ans[i] += hi;
            ans[i + 1] += abs(lo);
        } else {
            auto [sz, h, type] = *lower_bound(v.begin(), v.end(), make_tuple(gap, 0, 0));
            ll curh = h, curl = sz - h;
            if (type == 1) {
                curh = gap - curl;
            } else {
                curl = gap - curh;
            }
            ans[i] += curh;
            ans[i + 1] += abs(curl);
        }
    }

    for (int i = 1; i <= n; i++) {
        cout << ans[i] << "\n";
    }
}

// 5 4 2 6
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...