k

rabbitrobbin 2025-04-19 15:12:27 8
#include<bits/stdc++.h>
using namespace std;
#define N 200005
#define lc p<<1
#define rc p<<1|1
#define LL long long
int a[N];
int n;
struct tree{
    int l,r;
    LL sum,m_sum,l_sum,r_sum;
}t[N<<2];
void pushup(int p){
    t[p].sum=t[lc].sum+t[rc].sum;
    t[p].l_sum=max(t[lc].l_sum,t[lc].sum+t[rc].l_sum);
    t[p].r_sum=max(t[rc].r_sum,t[rc].sum+t[lc].r_sum);
    t[p].m_sum=max({t[lc].m_sum,t[rc].m_sum,t[lc].r_sum+t[rc].l_sum});
}
void build(int p,int l,int r){
    t[p]={l,r,0,0,0,0};
    if(l==r){
        t[p].sum=t[p].l_sum=t[p].r_sum=t[p].m_sum=a[l];
        return;
    }
    int mid=l+r>>1;
    build(lc,l,mid);
    build(rc,mid+1,r);
    pushup(p);
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",a+i);
    build(1,1,n);
    printf("%lld",t[1].m_sum);
    return 0;
}
{{ vote && vote.total.up }}