Submission #1308646

#TimeUsernameProblemLanguageResultExecution timeMemory
1308646VMaksimoski008Snowball (JOI21_ho_t2)C++20
100 / 100
1685 ms6728 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int find_first(vector<ll> &a, ll x) { int l=1, r=a.size()-1, ans=1e9; while(l <= r) { int m = (l + r) / 2; if(a[m] >= x) ans = m, r = m - 1; else l = m + 1; } return ans; } signed main() { int n, q; cin >> n >> q; vector<ll> a(n+2); for(int i=1; i<=n; i++) cin >> a[i]; a[0] = -1e18; a[n+1] = 1e18; ll cur = 0; vector<ll> mn(q+1), mx(q+1); for(int i=1; i<=q; i++) { ll x; cin >> x; cur += x; mn[i] = max(mn[i-1], -cur); mx[i] = max(mx[i-1], cur); } for(int i=1; i<=n; i++) { ll L=a[i], R=a[i]; ll l=a[i-1], r=a[i]-1; while(l <= r) { ll mid = (l + r) / 2; if(find_first(mn, a[i] - mid) < find_first(mx, mid - a[i-1] + 1)) L = mid, r = mid - 1; else l = mid + 1; } l=a[i]+1, r=a[i+1]; while(l <= r) { ll mid = (l + r) / 2; if(find_first(mx, mid - a[i]) < find_first(mn, a[i+1] - mid + 1)) R = mid, l = mid + 1; else r = mid - 1; } cout << R - L << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...