#include <iostream>
#include<vector>
#include<climits>
using namespace std;
vector<int> bestprefixArray(vector<int>& nums) {
int n = nums.size();
vector<int> p1(n);
int bestEnding = nums[0];
int bestSoFar = nums[0];
p1[0] = nums[0];
for (int i = 1; i < n; i++) {
bestEnding = max(nums[i], bestEnding + nums[i]);
bestSoFar = max(bestSoFar, bestEnding);
p1[i] = bestSoFar;
}
return p1;
}
vector<int> bestSuffixArray(vector<int>& nums) {
int n = nums.size();
vector<int> s1(n);
int bestEnding = nums[n - 1];
int bestSoFar = nums[n - 1];
s1[n - 1] = nums[n - 1];
for (int i = n - 2; i >= 0; i--) {
bestEnding = max(nums[i], bestEnding + nums[i]);
bestSoFar = max(bestSoFar, bestEnding);
s1[i] = bestSoFar;
}
return s1;
}
int main() {
vector<int> nums={0,6,5,-20,2,5,1,9,4};
int n = nums.size();
vector<int> p1 = bestprefixArray(nums);
vector<int> s1 = bestSuffixArray(nums);
int ans = INT_MIN;
for (int i = 0; i < n - 1; i++) {
ans = max(ans, p1[i] + s1[i + 1]);
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGNsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBiZXN0cHJlZml4QXJyYXkodmVjdG9yPGludD4mIG51bXMpIHsKICAgIGludCBuID0gbnVtcy5zaXplKCk7CiAgICB2ZWN0b3I8aW50PiBwMShuKTsKCiAgICBpbnQgYmVzdEVuZGluZyA9IG51bXNbMF07CiAgICBpbnQgYmVzdFNvRmFyID0gbnVtc1swXTsKCiAgICBwMVswXSA9IG51bXNbMF07CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBiZXN0RW5kaW5nID0gbWF4KG51bXNbaV0sIGJlc3RFbmRpbmcgKyBudW1zW2ldKTsKICAgICAgICBiZXN0U29GYXIgPSBtYXgoYmVzdFNvRmFyLCBiZXN0RW5kaW5nKTsKICAgICAgICBwMVtpXSA9IGJlc3RTb0ZhcjsKICAgIH0KCiAgICByZXR1cm4gcDE7Cn0KCnZlY3RvcjxpbnQ+IGJlc3RTdWZmaXhBcnJheSh2ZWN0b3I8aW50PiYgbnVtcykgewogICAgaW50IG4gPSBudW1zLnNpemUoKTsKICAgIHZlY3RvcjxpbnQ+IHMxKG4pOwoKICAgIGludCBiZXN0RW5kaW5nID0gbnVtc1tuIC0gMV07CiAgICBpbnQgYmVzdFNvRmFyID0gbnVtc1tuIC0gMV07CgogICAgczFbbiAtIDFdID0gbnVtc1tuIC0gMV07CgogICAgZm9yIChpbnQgaSA9IG4gLSAyOyBpID49IDA7IGktLSkgewogICAgICAgIGJlc3RFbmRpbmcgPSBtYXgobnVtc1tpXSwgYmVzdEVuZGluZyArIG51bXNbaV0pOwogICAgICAgIGJlc3RTb0ZhciA9IG1heChiZXN0U29GYXIsIGJlc3RFbmRpbmcpOwogICAgICAgIHMxW2ldID0gYmVzdFNvRmFyOwogICAgfQoKICAgIHJldHVybiBzMTsKfQoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8aW50PiBudW1zPXswLDYsNSwtMjAsMiw1LDEsOSw0fTsKICAgIGludCBuID0gbnVtcy5zaXplKCk7CgogICAgdmVjdG9yPGludD4gcDEgPSBiZXN0cHJlZml4QXJyYXkobnVtcyk7CiAgICB2ZWN0b3I8aW50PiBzMSA9IGJlc3RTdWZmaXhBcnJheShudW1zKTsKCiAgICBpbnQgYW5zID0gSU5UX01JTjsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKICAgIGFucyA9IG1heChhbnMsIHAxW2ldICsgczFbaSArIDFdKTsKICAgIH0KCQoJY291dDw8YW5zPDxlbmRsOwoJCiAgICByZXR1cm4gMDsKfQ==