#include <bits/stdc++.h>
using namespace std;
long getMaximumGrossValue(vector<int> arr) {
int n = arr.size();
vector<long long> pref(n + 1, 0);
for (int i = 1; i <= n; i++)
pref[i] = pref[i - 1] + arr[i - 1];
vector<long long> bestPrefix(n + 1);
bestPrefix[0] = pref[0];
for (int i = 1; i <= n; i++)
bestPrefix[i] = max(bestPrefix[i - 1], pref[i]);
vector<long long> bestSuffix(n + 1);
bestSuffix[n] = pref[n];
for (int i = n - 1; i >= 0; i--)
bestSuffix[i] = max(bestSuffix[i + 1], pref[i]);
long long ans = LLONG_MIN;
for (int b = 0; b <= n; b++) {
long long cur = 2LL * bestPrefix[b]
- 2LL * pref[b]
+ 2LL * bestSuffix[b]
- pref[n];
ans = max(ans, cur);
}
return ans;
}
int main() {
// Example from the problem description
std::vector<int> arr = {-5, 3, 9, 4};
// vector<int> arr = {-1,1,-2,-2};
// vector<int> arr= {4,-8,2,-10,3,-20};
std::cout << "Max Gross Value: " << getMaximumGrossValue(arr) << std::endl; // Output: 21
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGdldE1heGltdW1Hcm9zc1ZhbHVlKHZlY3RvcjxpbnQ+IGFycikgewogICAgaW50IG4gPSBhcnIuc2l6ZSgpOwoKICAgIHZlY3Rvcjxsb25nIGxvbmc+IHByZWYobiArIDEsIDApOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICBwcmVmW2ldID0gcHJlZltpIC0gMV0gKyBhcnJbaSAtIDFdOwoKICAgIHZlY3Rvcjxsb25nIGxvbmc+IGJlc3RQcmVmaXgobiArIDEpOwogICAgYmVzdFByZWZpeFswXSA9IHByZWZbMF07CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgYmVzdFByZWZpeFtpXSA9IG1heChiZXN0UHJlZml4W2kgLSAxXSwgcHJlZltpXSk7CgogICAgdmVjdG9yPGxvbmcgbG9uZz4gYmVzdFN1ZmZpeChuICsgMSk7CiAgICBiZXN0U3VmZml4W25dID0gcHJlZltuXTsKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgYmVzdFN1ZmZpeFtpXSA9IG1heChiZXN0U3VmZml4W2kgKyAxXSwgcHJlZltpXSk7CgogICAgbG9uZyBsb25nIGFucyA9IExMT05HX01JTjsKCiAgICBmb3IgKGludCBiID0gMDsgYiA8PSBuOyBiKyspIHsKICAgICAgICBsb25nIGxvbmcgY3VyID0gMkxMICogYmVzdFByZWZpeFtiXQogICAgICAgICAgICAgICAgICAgICAgLSAyTEwgKiBwcmVmW2JdCiAgICAgICAgICAgICAgICAgICAgICArIDJMTCAqIGJlc3RTdWZmaXhbYl0KICAgICAgICAgICAgICAgICAgICAgIC0gcHJlZltuXTsKICAgICAgICBhbnMgPSBtYXgoYW5zLCBjdXIpOwogICAgfQoKICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCkgewogICAgLy8gRXhhbXBsZSBmcm9tIHRoZSBwcm9ibGVtIGRlc2NyaXB0aW9uCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGFyciA9IHstNSwgMywgOSwgNH07CiAgICAvLyB2ZWN0b3I8aW50PiBhcnIgPSB7LTEsMSwtMiwtMn07CiAgICAvLyB2ZWN0b3I8aW50PiBhcnI9IHs0LC04LDIsLTEwLDMsLTIwfTsKICAgIHN0ZDo6Y291dCA8PCAiTWF4IEdyb3NzIFZhbHVlOiAiIDw8IGdldE1heGltdW1Hcm9zc1ZhbHVlKGFycikgPDwgc3RkOjplbmRsOyAvLyBPdXRwdXQ6IDIxCiAgICByZXR1cm4gMDsKfQ==