Submission #1315802

#TimeUsernameProblemLanguageResultExecution timeMemory
1315802999captainHacker (BOI15_hac)C++20
100 / 100
99 ms12496 KiB
#include<bits/stdc++.h> #define int long long using namespace std; typedef pair<int,int> pii; int n; int v[500010],p[500010]; stack<pii> s1,s2; void add(int t){ if(s1.empty()){ s1.push({t , t}); return; } s1.push({t , min(t , s1.top().second)}); } void remove(){ if(s2.empty()){ while(!s1.empty()){ int t = s1.top().first; s1.pop(); if(s2.empty()){ s2.push({t , t}); } else{ s2.push({t , min(t , s2.top().second)}); } } } s2.pop(); } int query(){ if(s2.empty()){ return s1.top().second; } else if(s1.empty()){ return s2.top().second; } else{ return min(s1.top().second, s2.top().second); } } signed main(){ cin >> n; for(int i = 1;i <= n;i++){ cin >> v[i]; } int d = (n + 1)/2; for(int i = 1;i <= d;i++){ p[1] += v[i]; } for(int i = 2;i <= n;i++){ p[i] = p[i - 1] - v[i - 1]; if(i + d - 1 <= n){ p[i] += v[i + d - 1]; } else{ p[i] += v[i + d - 1 - n]; } } int ans = 0; for(int i = 1;i <= d;i++){ add(p[i]); } for(int i = 1;i <= n;i++){ ans = max(ans, query()); remove(); if(d + i <= n){ add(p[d + i]); } else{ add(p[d + i - n]); } } 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...