#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |