Select solution language
            
            Write solution here.
                
                    
                    
                    
                        
                        ## Hướng dẫn
Cố định i. \
Gọi: 
- pre[i] là tổng lớn nhất trong đoạn [1, i] 
- suf[i] là tổng lớn nhất trong đoạn [i, n] 
**Đáp án bài toán là: max(pre[i-1] + suf[i], pre[i] + suf[i+1]), 2 ≤ i ≤ n - 1**
**Code: O(n)**
```
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 1e5 + 5;
int n;
ll a[MAXN], pre[MAXN], suf[MAXN];
ll sum;
#define FOR(i,a,b)  for(int i=a; i<=b; ++i)
#define FORD(i,a,b) for(int i=a; i>=b; --i)
bool maximize(ll &a, const ll &b)
{
    return (a < b) ? a = b, 1 : 0;
}
signed main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    cin >> n;
    FOR(i,0,n+1) pre[i] = suf[i] = LLONG_MIN;
    sum = 0;
    FOR(i,1,n) 
    {
        cin >> a[i];
        sum += a[i];
        maximize(pre[i], pre[i-1]);
        maximize(pre[i], sum);
        maximize(sum, 0);
    }
    sum = 0;
    ll ans = LLONG_MIN;
    FORD(i,n,1)
    {
        sum += a[i];
        maximize(suf[i], suf[i+1]);
        maximize(suf[i], sum);
        maximize(sum, 0);
        if (i-1 >= 1) maximize(ans, pre[i-1] + suf[i]);
        if (i+1 <= n) maximize(ans, pre[i] + suf[i+1]);
    }
    cout << ans;
    return 0;
}
```