60分,求调!!!~
查看原帖
60分,求调!!!~
1264660
SakuraHaha楼主2024/6/27 12:08
#include<iostream>
using namespace std;

int init = [] {
    cin.tie(nullptr)->sync_with_stdio(false);
    return 0;
}();

typedef long long LL;
const LL inf = -3e18;
const int MAXN = 2e5 + 5;
LL l_max[MAXN], r_max[MAXN];
LL l_min[MAXN], r_min[MAXN];
LL arr[MAXN];

int main() {
    LL n, sum = 0;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> arr[i];
        sum += arr[i];
    }
    for (int i = 0; i <= n; ++i) {
        l_max[i] = inf, l_min[i] = -inf;
        r_max[i] = inf, r_min[i] = -inf;
    }
    LL f_max_l = inf, f_max_r = inf;
    LL f_min_l = -inf, f_min_r = -inf; 
    for (int i = 2; i <= n; ++i) {
        f_max_l = max(f_max_l, (LL)0) + arr[i - 1];
        l_max[i] = max(l_max[i], f_max_l);
        f_min_l = min(f_min_l, (LL)0) + arr[i - 1];
        l_min[i] = min(l_min[i - 1], f_min_l);
    }
    for (int i = n - 1; i >= 1; --i) {
        f_max_r = max(f_max_r, (LL)0) + arr[i + 1];
        r_max[i] = max(r_max[i], f_max_r);
        f_min_r = min(f_min_r, (LL)0) + arr[i + 1];
        r_min[i] = min(r_min[i + 1], f_min_r);
    }
    LL ans = inf, res = -inf;
    for (int i = 1; i <= n; ++i) {
        ans = max(ans, l_max[i] + r_max[i]);
    }
    cout << max(ans, sum - res_min) << endl;
    return 0;
}
2024/6/27 12:08
加载中...