Submission #957878

#TimeUsernameProblemLanguageResultExecution timeMemory
957878peterandvoiSnowball (JOI21_ho_t2)C++17
100 / 100
80 ms14268 KiB
#include <bits/stdc++.h> using namespace std; #ifdef ngu #include "debug.h" #else #define debug(...) 42 #endif const int N = (int) 2e5 + 5; const long long INF = (long long) 1e18; int n, q; long long a[N], res[N]; signed main() { ios::sync_with_stdio(false); cin.tie(0); #ifdef ngu freopen("test.inp", "r", stdin); freopen("test.out", "w", stdout); #endif cin >> n >> q; a[0] = -INF; a[n + 1] = INF; for (int i = 1; i <= n; ++i) { cin >> a[i]; } vector<pair<long long, int>> delta; for (int i = 0; i <= n; ++i) { delta.emplace_back(a[i + 1] - a[i], i); } sort(delta.rbegin(), delta.rend()); long long cur = 0, L = 0, R = 0; for (int i = 1; i <= q; ++i) { long long x; cin >> x; cur += x; if (x > 0) { R = max(R, cur); while (delta.size() && delta.back().first <= L + R) { auto [v, id] = delta.back(); res[id] += v - L; res[id + 1] += L; delta.pop_back(); } } else { L = max(L, -cur); while (delta.size() && delta.back().first <= L + R) { auto [v, id] = delta.back(); res[id] += R; res[id + 1] += v - R; delta.pop_back(); } } } while (delta.size()) { auto [v, id] = delta.back(); res[id] += R; res[id + 1] += L; delta.pop_back(); } for (int i = 1; i <= n; ++i) { cout << res[i] << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...