#include<iostream>
using namespace std;
int get_largest_sum(int a[], int n, int& start, int& end)
{
int start_temp;
int curr_max = a[0],max_so_far = a[0];
start = end = 0;
for(int i = 1; i < n; i++)
{
if (a[i] > curr_max + a[i])
{
curr_max = a[i];
if(curr_max > 0) //to handle the case when all elements are negative
start = i;
}
else
curr_max = curr_max + a[i];
if (max_so_far <= curr_max)
{
max_so_far = curr_max;
end = i;
if (max_so_far < 0) //to handle the case when all elements are negative
start = i;
}
}
return max_so_far;
}
int main()
{
//int a[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int a[] = {-2, -3, 4, -1, -2, 1, 5, -3};
//int a[] = {-2, -3, -1, -2, -3};
int n = sizeof(a)/sizeof(a[0]);
int start, end;
int sum = get_largest_sum(a, n, start, end);
printf("Sum = %d...Start index = %d...End index = %d", sum, start, end);
getchar();
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZ2V0X2xhcmdlc3Rfc3VtKGludCBhW10sIGludCBuLCBpbnQmIHN0YXJ0LCBpbnQmIGVuZCkKewogICAgaW50IHN0YXJ0X3RlbXA7CiAgICBpbnQgY3Vycl9tYXggPSBhWzBdLG1heF9zb19mYXIgPSBhWzBdOwogICAgc3RhcnQgPSBlbmQgPSAwOwogICAgCiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIGlmIChhW2ldID4gY3Vycl9tYXggKyBhW2ldKQogICAgICAgIHsKICAgICAgICAgICAgY3Vycl9tYXggPSBhW2ldOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYoY3Vycl9tYXggPiAwKSAvL3RvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIGFsbCBlbGVtZW50cyBhcmUgbmVnYXRpdmUKICAgICAgICAgICAgICAgIHN0YXJ0ID0gaTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBjdXJyX21heCA9IGN1cnJfbWF4ICsgYVtpXTsKICAgICAgICBpZiAobWF4X3NvX2ZhciA8PSBjdXJyX21heCkKICAgICAgICB7CiAgICAgICAgICAgIG1heF9zb19mYXIgPSBjdXJyX21heDsKICAgICAgICAgICAgZW5kID0gaTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChtYXhfc29fZmFyIDwgMCkgLy90byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBhbGwgZWxlbWVudHMgYXJlIG5lZ2F0aXZlCiAgICAgICAgICAgICAgICBzdGFydCA9IGk7CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gbWF4X3NvX2ZhcjsKfQoKaW50IG1haW4oKQp7CiAgICAvL2ludCBhW10gPSB7LTIsIDEsIC0zLCA0LCAtMSwgMiwgMSwgLTUsIDR9OwogICAgaW50IGFbXSA9IHstMiwgLTMsIDQsIC0xLCAtMiwgMSwgNSwgLTN9OwogICAgLy9pbnQgYVtdID0gey0yLCAtMywgLTEsIC0yLCAtM307CiAgICBpbnQgbiA9IHNpemVvZihhKS9zaXplb2YoYVswXSk7CiAgICAKICAgIGludCBzdGFydCwgZW5kOwogICAgaW50IHN1bSA9IGdldF9sYXJnZXN0X3N1bShhLCBuLCBzdGFydCwgZW5kKTsKICAgIAogICAgcHJpbnRmKCJTdW0gPSAlZC4uLlN0YXJ0IGluZGV4ID0gJWQuLi5FbmQgaW5kZXggPSAlZCIsIHN1bSwgc3RhcnQsIGVuZCk7CiAgICBnZXRjaGFyKCk7Cn0=