Pagini recente » Cod sursa (job #831624) | Cod sursa (job #2208607) | Cod sursa (job #182823) | Cod sursa (job #911153) | Cod sursa (job #3140346)
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
const int MAX_LENGTH = 6000000;
int main() {
int numLen;
fin >> numLen;
int num[MAX_LENGTH + 1], sum[MAX_LENGTH + 1] = {0};
for (int i = 1; i <= numLen; ++i) {
fin >> num[i];
sum[i] = num[i] + sum[i - 1];
}
int st = 1, end = 1, maxSum = INT_MIN, maxSt = 1, maxEnd = 1;
for (int i = 1; i <= numLen; ++i) {
if (num[i] + sum[i - 1] >= num[i]) {
sum[i] = num[i] + sum[i - 1];
end = i;
if (num[i] + sum[i - 1] > maxSum) {
maxSum = num[i] + sum[i - 1];
maxSt = st;
maxEnd = end;
}
} else {
sum[i] = num[i];
st = i;
end = i;
if (num[i] > maxSum) {
maxSum = num[i];
maxSt = st;
maxEnd = end;
}
}
}
fout << maxSum << ' ' << maxSt << ' ' << maxEnd;
return 0;
}
/*
3
-100 0 100
=>
100 2 3
7
5 -6 3 4 -2 3 -3
=>
8 3 6
2
3 1
=>
4 1 2
5
3 1 -3 -1 4
=>
4 1 2
1
3
=>
3 1 1
3
-2 -1 -3
=>
-1 2 2
3
-1 -1 -1
=>
-1 1 1
5
1 -2 3 -4 5
=>
5 5 5
12
5 -6 3 4 -2 3 -3 -90 3 4 -2 3
=>
8 3 6
4
2000000000 -1 -2 -3
=>
2000000000 1 1
4
1000000000 -1 -2 1000000000
=>
1999999997 1 4
4
1000000001 1000000001 -1000000001 1000000001
=>
2000000002 1 2
1
0
=>
0 1 1
4
1000000001 1000000001 0 1
=>
2000000003 1 4
2
0 -2000000000
=>
0 1 1
5
0 0 0 0 0
=>
0 1 1
3
-100 0 100
=>
100 2 3
*/