#include <bits/stdc++.h>
using namespace std;
vector<int>getprefixMax(vector<int>&arr){
int n=arr.size();
vector<int>newprefixSum(n+1,0);
int curr=arr[1];
newprefixSum[1]=arr[1];
for(int i=2;i<=n;i++){
curr=max({0,curr+arr[i],arr[i]});
newprefixSum[i]=curr;
}
return newprefixSum;
}
vector<int>getsuffixMax(vector<int>&arr){
int n=arr.size();
vector<int>newsuffixSum(n+1,0);
int curr=arr[n];
newsuffixSum[n]=arr[n];
for(int i=n-1;i>0;i--){
curr=max({0,curr+arr[i],arr[i]});
newsuffixSum[i]=curr;
}
return newsuffixSum;
}
int getMaxSum(vector<int>&arr){
int n=arr.size();
if(n==0){
return 0;
}
vector<int>prefixMax=getprefixMax(arr);
vector<int>suffixMax=getsuffixMax(arr);
vector<int>finalprefixMax(n+2,0);
vector<int>finalsuffixMax(n+2,0);
finalprefixMax[1]=prefixMax[1];
for(int i=2;i<=n;i++){
finalprefixMax[i]=max(finalprefixMax[i-1],prefixMax[i]);
}
finalsuffixMax[n]=suffixMax[n];
for(int i=n-1;i>0;i--){
finalsuffixMax[i]=max(finalsuffixMax[i+1],suffixMax[i]);
}
int finalMax=0;
for(int i=0;i<=n;i++){
finalMax=max({finalMax,finalprefixMax[i]+finalsuffixMax[i+1]});
}
return finalMax;
}
int main() {
// your code goes here
int n;
cin>>n;
vector<int>arr(n+1);
for(int i=1;i<=n;i++){
cin>>arr[i];
}
cout<<"The maximum sum of non-overlapping subarrays is:"<<getMaxSum(arr);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3RvcjxpbnQ+Z2V0cHJlZml4TWF4KHZlY3RvcjxpbnQ+JmFycil7CglpbnQgbj1hcnIuc2l6ZSgpOwoJdmVjdG9yPGludD5uZXdwcmVmaXhTdW0obisxLDApOwoJaW50IGN1cnI9YXJyWzFdOwoJbmV3cHJlZml4U3VtWzFdPWFyclsxXTsKCWZvcihpbnQgaT0yO2k8PW47aSsrKXsKCQljdXJyPW1heCh7MCxjdXJyK2FycltpXSxhcnJbaV19KTsKCQluZXdwcmVmaXhTdW1baV09Y3VycjsKCX0KCXJldHVybiBuZXdwcmVmaXhTdW07CiAKfQp2ZWN0b3I8aW50PmdldHN1ZmZpeE1heCh2ZWN0b3I8aW50PiZhcnIpewoJaW50IG49YXJyLnNpemUoKTsKCXZlY3RvcjxpbnQ+bmV3c3VmZml4U3VtKG4rMSwwKTsKCWludCBjdXJyPWFycltuXTsKCW5ld3N1ZmZpeFN1bVtuXT1hcnJbbl07Cglmb3IoaW50IGk9bi0xO2k+MDtpLS0pewoJCWN1cnI9bWF4KHswLGN1cnIrYXJyW2ldLGFycltpXX0pOwoJCW5ld3N1ZmZpeFN1bVtpXT1jdXJyOwoJfQoJcmV0dXJuIG5ld3N1ZmZpeFN1bTsKIAp9CiAKaW50IGdldE1heFN1bSh2ZWN0b3I8aW50PiZhcnIpewoJaW50IG49YXJyLnNpemUoKTsKCWlmKG49PTApewoJCXJldHVybiAwOwoJfQoJdmVjdG9yPGludD5wcmVmaXhNYXg9Z2V0cHJlZml4TWF4KGFycik7Cgl2ZWN0b3I8aW50PnN1ZmZpeE1heD1nZXRzdWZmaXhNYXgoYXJyKTsKIAoJdmVjdG9yPGludD5maW5hbHByZWZpeE1heChuKzIsMCk7Cgl2ZWN0b3I8aW50PmZpbmFsc3VmZml4TWF4KG4rMiwwKTsKIAoJZmluYWxwcmVmaXhNYXhbMV09cHJlZml4TWF4WzFdOwoJZm9yKGludCBpPTI7aTw9bjtpKyspewoJCWZpbmFscHJlZml4TWF4W2ldPW1heChmaW5hbHByZWZpeE1heFtpLTFdLHByZWZpeE1heFtpXSk7Cgl9CiAKCWZpbmFsc3VmZml4TWF4W25dPXN1ZmZpeE1heFtuXTsKCWZvcihpbnQgaT1uLTE7aT4wO2ktLSl7CgkJZmluYWxzdWZmaXhNYXhbaV09bWF4KGZpbmFsc3VmZml4TWF4W2krMV0sc3VmZml4TWF4W2ldKTsKCX0KCWludCBmaW5hbE1heD0wOwoJZm9yKGludCBpPTA7aTw9bjtpKyspewoJCWZpbmFsTWF4PW1heCh7ZmluYWxNYXgsZmluYWxwcmVmaXhNYXhbaV0rZmluYWxzdWZmaXhNYXhbaSsxXX0pOwoJfQoJcmV0dXJuIGZpbmFsTWF4OwogCn0KIAppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWludCBuOwoJY2luPj5uOwoJdmVjdG9yPGludD5hcnIobisxKTsKCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQljaW4+PmFycltpXTsKCX0KCWNvdXQ8PCJUaGUgbWF4aW11bSBzdW0gb2Ygbm9uLW92ZXJsYXBwaW5nIHN1YmFycmF5cyBpczoiPDxnZXRNYXhTdW0oYXJyKTsKIAogCglyZXR1cm4gMDsKfQ==