洛谷P1115

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;
}
posted @ 2025-05-21 16:32  Chuan81  阅读(11)  评论(0)    收藏  举报