Pagini recente » Cod sursa (job #838109) | Cod sursa (job #1514674) | Cod sursa (job #968870) | Cod sursa (job #371954) | Cod sursa (job #3216567)
#include <bits/stdc++.h>
using namespace std;
const int MAX_SIZE = 1e6 * 6;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int main() {
int arraySize;
fin >> arraySize;
long arr[MAX_SIZE + 1];
for (int i = 0; i < arraySize; ++i) {
fin >> arr[i];
}
long maxSum = LONG_MIN, firstIndex = 0, secondIndex = 0, partialFirstIndex = 0, partialSecondIndex = 0;
long partialMaxSum[MAX_SIZE + 1] = {LONG_MIN};
partialMaxSum[0] = arr[0];
for (int i = 1; i < arraySize; ++i) {
if (arr[i] > partialMaxSum[i - 1] + arr[i]) {
partialMaxSum[i] = arr[i];
partialFirstIndex = i;
partialSecondIndex = i;
} else {
partialMaxSum[i] = partialMaxSum[i - 1] + arr[i];
++partialSecondIndex;
}
if (maxSum < partialMaxSum[i]
|| (maxSum == partialMaxSum[i] && partialFirstIndex + 1 < firstIndex)
|| (maxSum == partialMaxSum[i] && partialFirstIndex + 1 == firstIndex && partialSecondIndex - 1 < secondIndex)) {
maxSum = partialMaxSum[i];
firstIndex = partialFirstIndex + 1;
secondIndex = partialSecondIndex + 1;
}
}
fout << partialMaxSum[secondIndex - 1] << " " << firstIndex << " " << secondIndex;
return 0;
}