Submission #1325466

#TimeUsernameProblemLanguageResultExecution timeMemory
1325466polishprogrammerSnowball (JOI21_ho_t2)C++20
100 / 100
908 ms8420 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define fi first #define se second #define lld long double int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); int n, q; cin >> n >> q; ll w, ak = 0, p = 0, l = 0; vector<ll> poz(n); vector<pair<ll, int>> lewo, prawo; prawo.pb({0, 0}); lewo.pb({0, 0}); for (int i = 0; i < n; i++) cin >> poz[i]; for (int i = 1; i <= q; i++) { cin >> w; ak += w; if (ak > p) { prawo.pb({ak, i}); p = ak; } if (ak < l) { lewo.pb({-ak, i}); l = ak; } } vector<ll> wyn(n); wyn[0] = -l; wyn[n-1] += p; pair<ll, int> pa; int cz1, cz2; for (int i = 1; i < n; i++) { ll li = poz[i-1], pi = poz[i]; ll pocz = 0, kon = pi - li, sr; if (-l + p < kon) { wyn[i-1] += p; wyn[i] += -l; continue; } while (pocz < kon) { sr = (pocz + kon + 1) / 2; pa = {sr, 0}; auto it = lower_bound(prawo.begin(), prawo.end(), pa); if (it != prawo.end()) { pa = *it; cz1 = pa.se; } else cz1 = 1e9; pa = {pi - li - sr + 1, 0}; it = lower_bound(lewo.begin(), lewo.end(), pa); if (it != lewo.end()) { pa = *it; cz2 = pa.se; } else cz2 = 1e9; if (cz1 < cz2) pocz = sr; else kon = sr - 1; } wyn[i-1] += pocz; wyn[i] += pi-li-pocz; } for (ll i : wyn) cout << i << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...