P1115 最大子段和
点击查看代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
const int INF = 0x3f3f3f3f;
int n = 0, ans = -INF;
vector<int> a(N);
void dc(int l, int r) {
if(l == r) ans = max(ans, a[l]);
else {
int mid = (l + r) >> 1;
dc(l, mid);
dc(mid + 1, r);
int pre = -INF, suf = -INF;
for(int i = mid, j = 0; i >= l; i--) {
j += a[i];
pre = max(j, pre);
}
for(int i = mid + 1, j = 0; i <= r; i++) {
j += a[i];
suf = max(j, suf);
}
ans = max(ans, pre + suf);
}
}
int main() {
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
dc(1, n);
cout << ans << '\n';
return 0;
}