熊恒锐 • 11天前
#include <bits/stdc++.h>
using namespace std;
long long a[1000001];
struct info {
long long left, right;
long long sum;
};
long long ans = 0;
info getAns(int left, int right) {
if (left == right) {
ans = max(ans, a[left]);
return {a[left], a[left], a[left]};
}
int mid = (left + right) / 2;
info i1 = getAns(left, mid);
info i2 = getAns(mid + 1, right);
ans = max(ans, i1.right + i2.left);
ans = max(ans, i1.sum + i2.left);
ans = max(ans, i1.right + i2.sum);
return {
max(i1.left, i1.sum + i2.left),
max(i2.right, i2.sum + i1.right),
i1.sum + i2.sum
};
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
getAns(1, n);
cout << ans;
return 0;
}
评论:
请先登录,才能进行评论