Submission #1230428

#TimeUsernameProblemLanguageResultExecution timeMemory
1230428DangKhoizzzzSnowball (JOI21_ho_t2)C++20
100 / 100
88 ms9800 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second #define pii pair <int , int> #define arr3 array <int , 3> using namespace std; const int INF = 1e18; const int maxn = 2e5 + 7; int mn[maxn] , mx[maxn] , n , q , a[maxn] , b[maxn] , psb[maxn]; void solve() { cin >> n >> q; for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 1; i <= q; i++) cin >> b[i]; for(int i = 1; i <= q; i++) { psb[i] = psb[i-1] + b[i]; mn[i] = min(mn[i-1] , psb[i]); mx[i] = max(mx[i-1] , psb[i]); } a[n+1] = INF; a[0] = -INF; for(int i = 1; i <= n; i++) { int l = 0 , r = q , resL = 0 , resR = 0 , ansL = 0 , ansR = 0; while(l <= r) { int mid = (l+r)>>1; if(a[i] - a[i-1] > mx[mid] + -1*mn[mid]) { resL = mid; l = mid + 1; } else r = mid - 1; } if(psb[resL+1] < 0) ansL = (a[i] - a[i-1]) - mx[resL]; else ansL = mn[resL]*-1; l = 0 , r = q; while(l <= r) { int mid = (l+r)>>1; if(a[i+1] - a[i] > mx[mid] + -1*mn[mid]) { resR = mid; l = mid + 1; } else r = mid - 1; } if(psb[resR+1] > 0) ansR = (a[i+1] - a[i]) - -1*mn[resR]; else ansR = mx[resR]; cout << ansL + ansR << '\n'; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...