# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1177163 | nguyn | Snowball (JOI21_ho_t2) | C++20 | 75 ms | 11412 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define F first
#define S second
#define pb push_back
#define pii pair<int,int>
const int N = 2e5 + 5;
int n, q;
int x[N], w[N];
int d[N];
int plef[N], prig[N];
int res[N];
signed main(){
ios_base::sync_with_stdio(false) ;
cin.tie(0) ; cout.tie(0) ;
if (fopen("INP.INP" ,"r")) {
freopen("INP.INP" ,"r" , stdin) ;
freopen("OUT.OUT" , "w" , stdout) ;
}
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> x[i];
}
for (int i = 1; i <= q; i++) {
cin >> w[i];
d[i] = d[i - 1] + w[i];
prig[i] = prig[i - 1];
plef[i] = plef[i - 1];
if (d[i] > 0) prig[i] = max(prig[i], d[i]);
if (d[i] < 0) plef[i] = max(plef[i], abs(d[i]));
}
res[1] += plef[q];
res[n] += prig[q];
for (int i = 1; i < n; i++) {
int l = 1;
int r = q;
int ans = 0;
while(l <= r) {
int mid = (l + r) / 2;
if (plef[mid] + prig[mid] >= x[i + 1] - x[i]) {
r = mid - 1;
ans = mid;
}
else {
l = mid + 1;
}
}
if (ans) {
if (d[ans] > 0) {
res[i + 1] += plef[ans];
res[i] += x[i + 1] - x[i] - plef[ans];
}
else {
res[i] += prig[ans];
res[i + 1] += x[i + 1] - x[i] - prig[ans];
}
}
else {
res[i] += prig[q];
res[i + 1] += plef[q];
}
}
for (int i = 1; i <= n; i++) {
cout << res[i] << '\n';
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |