Submission #384952

#TimeUsernameProblemLanguageResultExecution timeMemory
384952timmyfengSnowball (JOI21_ho_t2)C++17
100 / 100
125 ms12268 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, q;
    cin >> n >> q;

    vector<long long> x(n);
    for (auto &i : x) {
        cin >> i;
    }

    long long total = 0;
    vector<long long> left(q + 1), right(q + 1);
    for (int i = 0; i < q; ++i) {
        long long w;
        cin >> w;
        total += w;
        left[i + 1] = max(-total, left[i]);
        right[i + 1] = max(total, right[i]);
    }

    long long prv = left[q];
    for (int i = 1; i < n; ++i) {
        int low = 0, high = q;
        while (low < high) {
            int mid = (low + high + 1) / 2;
            if (left[mid] + right[mid] <= x[i] - x[i - 1]) {
                low = mid;
            } else {
                high = mid - 1;
            }
        }

        if (high == q) {
            cout << prv + right[q] << "\n";
            prv = left[q];
        } else if (left[high] == left[high + 1]) {
            cout << prv + x[i] - x[i - 1] - left[high] << "\n";
            prv = left[high];
        } else {
            cout << prv + right[high] << "\n";
            prv = x[i] - x[i - 1] - right[high];
        }
    }

    cout << prv + right[q] << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...