#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
#define all(x) x.begin(), x.end()
const int MXN = 2e5+5;
int n, q;
ll x[MXN], w[MXN], ans[MXN];
int32_t main() {
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
cin >> n >> q;
for(int i=1; i<=n; i++) cin >> x[i];
ll mn = 0, mx = 0;
vector<pll> v1={{0,0}}, v2={{0,0}};
for(int i=1; i<=q; i++ ){
cin >> w[i];
w[i] += w[i-1];
mn = min(mn, w[i]);
mx = max(mx, w[i]);
if(w[i]>v1.back().first) v1.push_back({w[i], i});
if(w[i]<-v2.back().first) v2.push_back({-w[i], i});
}
v1.push_back({1e18, 1e9});
v2.push_back({1e18, 1e9});
for(int i=1; i<n; i++)
if(x[i]+mx < x[i+1]+mn) {
ans[i] += mx;
ans[i+1] += -mn;
}
else {
ll l=x[i], r=x[i+1]+1, m;
while(r-l>1) {
m = ((l+r)/2);
int pos1 = v1[lower_bound(all(v1), pll(m-x[i], 0ll))-v1.begin()].second;
int pos2 = v2[lower_bound(all(v2), pll(x[i+1]-m+1, 0ll))-v2.begin()].second;
(pos1<pos2 ? l : r) = m;
}
ans[i] += l-x[i];
ans[i+1] += x[i+1]-l;
}
ans[1] -= mn;
ans[n] += mx;
for(int i=1; i<=n; i++) cout << ans[i] << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |