#include <climits>
#include <iostream>
using namespace std;
void maxSubArraySum(int a[], int size)
{
int max_so_far = INT_MIN, max_ending_here = 0,
start = 0, end = 0, s = 0;
for (int i = 0; i < size; i++) {
max_ending_here += a[i];
if (max_so_far < max_ending_here) {
max_so_far = max_ending_here;
start = s;
end = i;
}
if (max_ending_here < 0) {
max_ending_here = 0;
s = i + 1;
}
}
cout << "\nMaximum sum is " << max_so_far<< endl;
cout << "\nsize of subarray " << sizeof(max_so_far);
cout << "\nStarting position " << start << endl
<< "Ending position " << end << endl;
}
int main()
{
int a[] = { 2, -4, -5, 12, 18, 12, 15 };
int n = sizeof(a) / sizeof(a[0]);
maxSubArraySum(a, n);
return 0;
}
I2luY2x1ZGUgPGNsaW1pdHM+CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgbWF4U3ViQXJyYXlTdW0oaW50IGFbXSwgaW50IHNpemUpCnsKCWludCBtYXhfc29fZmFyID0gSU5UX01JTiwgbWF4X2VuZGluZ19oZXJlID0gMCwKCQlzdGFydCA9IDAsIGVuZCA9IDAsIHMgPSAwOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CgkJbWF4X2VuZGluZ19oZXJlICs9IGFbaV07CgoJCWlmIChtYXhfc29fZmFyIDwgbWF4X2VuZGluZ19oZXJlKSB7CgkJCW1heF9zb19mYXIgPSBtYXhfZW5kaW5nX2hlcmU7CgkJCXN0YXJ0ID0gczsKCQkJZW5kID0gaTsKCQl9CgoJCWlmIChtYXhfZW5kaW5nX2hlcmUgPCAwKSB7CgkJCW1heF9lbmRpbmdfaGVyZSA9IDA7CgkJCXMgPSBpICsgMTsKCQl9Cgl9Cgljb3V0IDw8ICJcbk1heGltdW0gIHN1bSBpcyAiIDw8IG1heF9zb19mYXI8PCBlbmRsOwoJY291dCA8PCAiXG5zaXplIG9mIHN1YmFycmF5ICIgPDwgc2l6ZW9mKG1heF9zb19mYXIpOwoJY291dCA8PCAiXG5TdGFydGluZyBwb3NpdGlvbiAiIDw8IHN0YXJ0IDw8IGVuZGwKCTw8ICJFbmRpbmcgcG9zaXRpb24gIiA8PCBlbmQgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CglpbnQgYVtdID0geyAyLCAtNCwgLTUsIDEyLCAxOCwgMTIsIDE1IH07CglpbnQgbiA9IHNpemVvZihhKSAvIHNpemVvZihhWzBdKTsKCW1heFN1YkFycmF5U3VtKGEsIG4pOwoJcmV0dXJuIDA7Cn0=