#include <bits/stdc++.h>
#define fi first
#define se second
#define int long long
#define pii pair<int,int>
#define all(s) s.begin(),s.end()
#define sz(s) (int)s.size()
#define dbg(x) "[" #x << " = " << x << "]"
using namespace std;
using ll = long long;
using ii = pair<int,int>;
using aa = array<int,3>;
bool maximize(int& a,int b){
if (a > b) return 0;
a = b;
return 1;
}
bool minimize(int &a,int b){
if (a <= b) return 0;
a = b;
return 1;
}
const int N = 5e5+5;
const int INF = 1e18;
const int MOD = 1e9+9999;
int n, mid, ans = 0, cur = 0;
int pre[N];
struct SMT{
int n;
vector <int> t, lazy;
SMT (int _n = 0) : n(_n){
t.assign((n << 2) + 5,INF);
lazy.assign((n << 2) + 5,INF);
}
void push(int id,int l,int r){
if (l == r) return;
minimize(t[id * 2],lazy[id]);
minimize(t[id * 2 + 1],lazy[id]);
minimize(lazy[id * 2],lazy[id]);
minimize(lazy[id * 2 + 1],lazy[id]);
}
void update(int id,int l,int r,int u,int v,int val){
if (r < u || l > v) return;
if (u <= l && r <= v){
minimize(t[id],val);
minimize(lazy[id],val);
push(id,l,r);
return;
}
push(id,l,r);
int mid = (l + r) >> 1;
update(id*2,l,mid,u,v,val);
update(id*2+1,mid+1,r,u,v,val);
t[id] = min(t[id * 2],t[id * 2 + 1]);
}
int get(int id,int l,int r,int pos){
if (r < pos || l > pos) return INF;
if (l == r) return t[id];
int mid = (l + r) >> 1;
push(id,l,r);
return min(get(id*2,l,mid,pos),get(id*2+1,mid+1,r,pos));
}
};
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
#define name "main"
if (fopen(name".inp","r")){
freopen(name".inp","r",stdin);
freopen(name".out","w",stdout);
}
cin >> n;
SMT tree(n);
mid = (n + 1) >> 1;
for (int i = 1; i <= n; i++){
cin >> pre[i];
pre[i] += pre[i - 1];
}
for (int i = 1; i <= n; i++){
cur = 0;
if (i < mid){
int right = n - mid + i + 1;
cur = pre[i] + pre[n] - pre[right - 1];
tree.update(1,1,n,1,i,cur);
tree.update(1,1,n,right,n,cur);
} else{
cur = pre[i] - pre[i - mid];
tree.update(1,1,n,i - mid + 1,i,cur);
}
}
for (int i = 1; i <= n; i++){
maximize(ans,tree.get(1,1,n,i));
}
cout << ans;
return 0;
}
Compilation message (stderr)
hac.cpp: In function 'int main()':
hac.cpp:76:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
76 | freopen(name".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
hac.cpp:77:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
77 | freopen(name".out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |