#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int maxSubarraySum(const vector<int>& b) {
int n = b.size() - 1; // Adjust for 1-based indexing
if (n == 0) return 0;
int T = 0; // Initialize T to 0, which will store the maximum sum subarray
int prv = 0; // Initialize prv to 0, which will store the current maximum sum subarray ending at b[i]
for (int i = 1; i <= n; ++i) {
int current = max(prv + b[i], b[i]);
current = max(current, 0);
prv = current;
T = max(T, current);
}
return T;
}
int main() {
int n;
cin >> n;
vector<int> b(n + 1); // Adjust for 1-based indexing
for (int i = 1; i <= n; ++i) {
cin >> b[i];
}
int result = maxSubarraySum(b);
cout << "Maximum subarray sum is " << result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1heFN1YmFycmF5U3VtKGNvbnN0IHZlY3RvcjxpbnQ+JiBiKSB7CiAgICBpbnQgbiA9IGIuc2l6ZSgpIC0gMTsgLy8gQWRqdXN0IGZvciAxLWJhc2VkIGluZGV4aW5nCiAgICBpZiAobiA9PSAwKSByZXR1cm4gMDsKICAgIAogICAgaW50IFQgPSAwOyAvLyBJbml0aWFsaXplIFQgdG8gMCwgd2hpY2ggd2lsbCBzdG9yZSB0aGUgbWF4aW11bSBzdW0gc3ViYXJyYXkKICAgIGludCBwcnYgPSAwOyAvLyBJbml0aWFsaXplIHBydiB0byAwLCB3aGljaCB3aWxsIHN0b3JlIHRoZSBjdXJyZW50IG1heGltdW0gc3VtIHN1YmFycmF5IGVuZGluZyBhdCBiW2ldCgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgaW50IGN1cnJlbnQgPSBtYXgocHJ2ICsgYltpXSwgYltpXSk7CiAgICAgICAgY3VycmVudCA9IG1heChjdXJyZW50LCAwKTsKICAgICAgICBwcnYgPSBjdXJyZW50OwogICAgICAgIFQgPSBtYXgoVCwgY3VycmVudCk7CiAgICB9CiAgICAKICAgIHJldHVybiBUOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBuOwogICAgY2luID4+IG47CgogICAgdmVjdG9yPGludD4gYihuICsgMSk7IC8vIEFkanVzdCBmb3IgMS1iYXNlZCBpbmRleGluZwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgY2luID4+IGJbaV07CiAgICB9CgogICAgaW50IHJlc3VsdCA9IG1heFN1YmFycmF5U3VtKGIpOwogICAgY291dCA8PCAiTWF4aW11bSBzdWJhcnJheSBzdW0gaXMgIiA8PCByZXN1bHQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=