致 王峻谦

熊恒锐  •  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;
}


评论:

请先登录,才能进行评论