Pagini recente » Cod sursa (job #1093697) | Cod sursa (job #1720522) | Cod sursa (job #969275) | Cod sursa (job #519435) | Cod sursa (job #2608754)
#include <fstream>
using namespace std;
int arr[6'000'005];
int n;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int bestSum = -214748368, Begin, End;
void maxSum(int left, int right) {
if (left == right) {
if (bestSum < arr[left]) {
bestSum = arr[left];
Begin = left;
End = left;
}
return;
}
int sumRight = -214748368;
int sumLeft = -214748368;
int sum = 0;
int r, l;
int mid = left + (right - left) / 2;
maxSum(left, mid);
maxSum(mid + 1, right);
for (int i = mid;i >= left;i --) {
sum += arr[i];
if (sum >= sumRight) {
sumRight = sum;
r = i;
}
}
sum = 0;
for (int j = mid + 1;j <= right;j ++) {
sum += arr[j];
if (sum > sumLeft) {
sumLeft = sum;
l = j;
}
}
if (sumRight + sumLeft > bestSum) {
bestSum = sumRight + sumLeft;
Begin = r;
End = l;
}
}
int main() {
fin >> n;
for (int i = 0;i < n;i ++)
fin >> arr[i];
maxSum(0, n - 1);
fout << bestSum << ' ' << Begin + 1 << ' ' << End + 1;
return 0;
}