Submission #652151

#TimeUsernameProblemLanguageResultExecution timeMemory
652151ymmHacker (BOI15_hac)C++17
100 / 100
133 ms10576 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; const int N = 500'010; int seg[2*N]; const int inf = 1e9+10; void up(int l, int r, int x) { l += N; r += N; while (l < r) { if (l&1) { seg[l] = min(seg[l], x); ++l; } if (r&1) { --r; seg[r] = min(seg[r], x); } l /= 2; r /= 2; } } int get(int i) { i += N; int ans = inf; while (i) { ans = min(ans, seg[i]); i /= 2; } return ans; } int n; int a[N]; int pre[N]; int main() { cin.tie(0) -> sync_with_stdio(false); fill(seg, seg+2*N, inf); cin >> n; Loop (i,0,n) { cin >> a[i]; pre[i+1] = pre[i] + a[i]; } int len = (n+1)/2; Loop (i,0,n) { if (i+len <= n) { int sum = pre[i+len] - pre[i]; up(i, i+len, sum); } else { int sum = pre[n] - pre[i] + pre[i+len-n]; up(i, n, sum); up(0, i+len-n, sum); } } int ans = 0; Loop (i,0,n) ans = max(ans, get(i)); cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...