제출 #1143082

#제출 시각아이디문제언어결과실행 시간메모리
1143082nuutsnoyntonSnowball (JOI21_ho_t2)C++20
100 / 100
250 ms11452 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const ll N = 2e5 + 2; ll a[N], b[N], c[N]; int main() { ll n, m, r, x, y, s, i, j, p, ans, t, mx_lef, mx_rig, co; cin >> n >> m; for (i = 1; i <=n; i ++) { cin >> a[i]; } vector < ll > v; vector < pair < ll, bool> > is_lef; co = 0; mx_lef = mx_rig = 0; for (i = 1; i <= m; i ++) { cin >> b[i]; if ( b[i] > 0) { co += b[i]; if ( mx_rig >= co) continue; mx_rig = co; v.push_back(mx_lef + mx_rig); is_lef.push_back(make_pair(mx_lef, 1)); } else { co += b[i]; if ( mx_lef >= (-co)) continue; mx_lef = -co; v.push_back(mx_lef + mx_rig); is_lef.push_back(make_pair(mx_rig, 0)); } } c[1] += mx_lef; c[n] += mx_rig; for (i = 1; i < n; i ++) { s = a[i + 1] - a[i]; r = lower_bound(v.begin(), v.end(), s) - v.begin(); if ( r == v.size()) { c[i] += mx_rig; c[i + 1] += mx_lef; continue; } if (is_lef[r].second == 1) { p = is_lef[r].first; p = min(p, s); c[i + 1] += p; c[i] += (s - p); } else { p = is_lef[r].first; p = min(p, s); c[i + 1] += (s - p); c[i] += p; } // cout << v[r] << " " << is_lef[r] << endl; } for (i = 1; i <= n; i ++) { cout << c[i] << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...