Pagini recente » Cod sursa (job #237594) | Cod sursa (job #547726) | Cod sursa (job #1507617) | Cod sursa (job #2779096) | Cod sursa (job #1893838)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int bestSum = -(1 << 30);
void getSSM(int left, int right, vector <int> &a) {
if (left == right) {
bestSum = max(bestSum, a[left]);
return;
}
int middle = (left + right) >> 1;
getSSM(left, middle, a);
getSSM(middle + 1, right, a);
int sum = 0;
int leftSum = -(1 << 30);
int rightSum = -(1 << 30);
for (int i = middle; i >= left; --i) {
sum += a[i];
leftSum = max(leftSum, sum);
}
sum = 0;
for (int i = middle + 1; i <= right; ++i) {
sum += a[i];
rightSum = max(rightSum, sum);
}
bestSum = max(bestSum, rightSum + leftSum);
}
int main() {
int N, left = 0;
vector <int> a;
f >> N;
a.resize(N);
for (int i = 0; i < N; ++i) {
f >> a[i];
}
getSSM(0, a.size() - 1, a);
g << bestSum << '\n';
return 0;
}