#include <bits/stdc++.h>
using namespace std;
vector<int>calculateMaxPrefix(vector<int>&a)
{
int n= a.size();
vector<int>prefixMaxSum(n+1,0);
prefixMaxSum[1] = a[0];
for(int i=1; i<=n; i++)
{
prefixMaxSum[i]= max({prefixMaxSum[i-1]+a[i-1],a[i-1],0});
}
return prefixMaxSum;
}
vector<int>calculateMaxSufix(vector<int>&a)
{
int n= a.size();
vector<int>sufixMaxSum(n+1,0);
sufixMaxSum[n] = a[n-1];
for(int i=n-1; i>0; i--)
{
sufixMaxSum[i]= max({sufixMaxSum[i+1]+a[i-1],a[i-1],0});
}
return sufixMaxSum;
}
int maxSumTwoNonIntersectingSubArrays(vector<int>&a)
{
vector<int>prefixMaxSum = calculateMaxPrefix(a);
vector<int>sufixMaxSum = calculateMaxSufix(a);
int n= a.size();
vector<int>maxSumPrefix(n+1,0);
maxSumPrefix[1] = prefixMaxSum[1];
int currMax = maxSumPrefix[1];
for(int i=2; i<=n-1; i++) // because whole array can't be in just prefix we have leave one in the last.
{
maxSumPrefix[i] = max(maxSumPrefix[i-1],prefixMaxSum[i]);
}
vector<int>maxSumSufix(n+1,0);
maxSumSufix[n]= sufixMaxSum[n];
for(int i=n-1; i>1; i--)
{
maxSumSufix[i]= max(maxSumSufix[i+1],sufixMaxSum[i]);
}
int maxSum= 0;
for(int i=1; i<=n-1; i++)
{
maxSum = max(maxSum,maxSumPrefix[i] + maxSumSufix[i+1]);
}
return maxSum;
}
int main() {
// your code goes here
int n;
cin>>n;
vector<int>a(n,0);
for(int i=0; i<n; i++)
{
int input;
cin>>input;
a[i]= input;
}
cout<<maxSumTwoNonIntersectingSubArrays(a)<<endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PmNhbGN1bGF0ZU1heFByZWZpeCh2ZWN0b3I8aW50PiZhKQp7CiAgICBpbnQgbj0gYS5zaXplKCk7CiAgICB2ZWN0b3I8aW50PnByZWZpeE1heFN1bShuKzEsMCk7CiAgICAKICAgIHByZWZpeE1heFN1bVsxXSA9IGFbMF07CiAgICAKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgcHJlZml4TWF4U3VtW2ldPSBtYXgoe3ByZWZpeE1heFN1bVtpLTFdK2FbaS0xXSxhW2ktMV0sMH0pOwogICAgfQogICAgCiAgICByZXR1cm4gcHJlZml4TWF4U3VtOwp9CgoKdmVjdG9yPGludD5jYWxjdWxhdGVNYXhTdWZpeCh2ZWN0b3I8aW50PiZhKQp7CiAgICBpbnQgbj0gYS5zaXplKCk7CiAgICB2ZWN0b3I8aW50PnN1Zml4TWF4U3VtKG4rMSwwKTsKICAgIAogICBzdWZpeE1heFN1bVtuXSA9IGFbbi0xXTsKICAgIAogICAgZm9yKGludCBpPW4tMTsgaT4wOyBpLS0pCiAgICB7CiAgICAgICAgc3VmaXhNYXhTdW1baV09IG1heCh7c3VmaXhNYXhTdW1baSsxXSthW2ktMV0sYVtpLTFdLDB9KTsKICAgIH0KICAgIAogICAgcmV0dXJuIHN1Zml4TWF4U3VtOwp9CgppbnQgbWF4U3VtVHdvTm9uSW50ZXJzZWN0aW5nU3ViQXJyYXlzKHZlY3RvcjxpbnQ+JmEpCnsKICAgIHZlY3RvcjxpbnQ+cHJlZml4TWF4U3VtID0gY2FsY3VsYXRlTWF4UHJlZml4KGEpOyAgICAKICAgIHZlY3RvcjxpbnQ+c3VmaXhNYXhTdW0gPSBjYWxjdWxhdGVNYXhTdWZpeChhKTsKICAgIGludCBuPSBhLnNpemUoKTsKICAgIHZlY3RvcjxpbnQ+bWF4U3VtUHJlZml4KG4rMSwwKTsKICAgIAogICAgbWF4U3VtUHJlZml4WzFdID0gcHJlZml4TWF4U3VtWzFdOwogICAgaW50IGN1cnJNYXggPSBtYXhTdW1QcmVmaXhbMV07CiAgICAKICAgIGZvcihpbnQgaT0yOyBpPD1uLTE7IGkrKykgICAvLyBiZWNhdXNlIHdob2xlIGFycmF5IGNhbid0IGJlIGluIGp1c3QgcHJlZml4IHdlIGhhdmUgbGVhdmUgb25lIGluIHRoZSBsYXN0LgogICAgewogICAgICAgIG1heFN1bVByZWZpeFtpXSA9IG1heChtYXhTdW1QcmVmaXhbaS0xXSxwcmVmaXhNYXhTdW1baV0pOwogICAgfQogICAgCiAgICB2ZWN0b3I8aW50Pm1heFN1bVN1Zml4KG4rMSwwKTsKICAgIG1heFN1bVN1Zml4W25dPSBzdWZpeE1heFN1bVtuXTsKICAgIAogICAgZm9yKGludCBpPW4tMTsgaT4xOyBpLS0pCiAgICB7CiAgICAgICAgbWF4U3VtU3VmaXhbaV09IG1heChtYXhTdW1TdWZpeFtpKzFdLHN1Zml4TWF4U3VtW2ldKTsKICAgIH0KICAgIAogICAgCiAgICBpbnQgbWF4U3VtPSAwOwogICAgZm9yKGludCBpPTE7IGk8PW4tMTsgaSsrKQogICAgewogICAgICAgIG1heFN1bSA9IG1heChtYXhTdW0sbWF4U3VtUHJlZml4W2ldICsgbWF4U3VtU3VmaXhbaSsxXSk7CiAgICB9CiAgICAKICAgIHJldHVybiBtYXhTdW07Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQogICBpbnQgbjsKICAgY2luPj5uOwogICAKICAgdmVjdG9yPGludD5hKG4sMCk7CiAgIAogICBmb3IoaW50IGk9MDsgaTxuOyBpKyspCiAgIHsKICAgICAgIGludCBpbnB1dDsKICAgICAgIGNpbj4+aW5wdXQ7CiAgICAgICAKICAgICAgIGFbaV09IGlucHV0OwogICB9CiAgICAKICAgIGNvdXQ8PG1heFN1bVR3b05vbkludGVyc2VjdGluZ1N1YkFycmF5cyhhKTw8ZW5kbDsKfQo=