Submission #1269198

#TimeUsernameProblemLanguageResultExecution timeMemory
1269198gaySnowball (JOI21_ho_t2)C++20
100 / 100
111 ms8280 KiB
#include <bits/stdc++.h> #include <experimental/random> #include <random> using namespace std; using ll = long long; using ld = long double; const ll INF = 1e18, MOD = 998244353; void solve(); signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll q = 1; //cin >> q; while (q--) { solve(); } } void solve() { ll n, q; cin >> n >> q; vector<ll> x(n); for (int i = 0; i < n; i++) { cin >> x[i]; } vector<ll> l(q + 1), r(q + 1); ll cur = 0; for (int i = 0; i < q; i++) { ll nw; cin >> nw; cur += nw; l[i + 1] = min(l[i], cur); r[i + 1] = max(r[i], cur); } vector<ll> ans(n); ans[0] += x[0] - (x[0] + l[q]); ans[n - 1] += (x[n - 1] + r[q]) - x[n - 1]; for (int i = 1; i < n; i++) { ll lf = 0, rf = q + 1; while (rf - lf > 1) { ll mid = (lf + rf) / 2; if (x[i - 1] + r[mid] <= x[i] + l[mid]) { lf = mid; } else { rf = mid; } } ll fir = x[i - 1] + r[lf]; ll sec = x[i] + l[lf]; if (lf == q) { ans[i - 1] += fir - x[i - 1]; ans[i] += x[i] - sec; } else { ll idx = fir; if (r[lf + 1] != r[lf]) { idx = sec; } ans[i - 1] += idx - x[i - 1]; ans[i] += x[i] - idx; } } for (auto i : ans) { cout << i << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...