#include <iostream>using namespace std;
const int N = 100010;int a[N], f[N], g[N];int main() {int n;cin >> n;
for(int i = 0; i < n; i ++){
cin >> a[i];
f[i] = a[i];
g[i] = a[i];
}
int sum = a[0], minN = 0, maxN = a[0];
for(int i = 1; i < n; i ++){
f[i] = max(f[i - 1] + a[i], a[i]);
sum += a[i];
if(f[i] > maxN) maxN = f[i];
}
// 找中间是否出现负数 因为如果数组全是正数 就不会经过环 在1 - n就是最大值了
// 所以要在 1 - n - 1寻找最小的包含负数的子数组
for(int i = 1; i < n - 1; i ++){
g[i] = min(g[i - 1] + a[i], g[i]);
if(g[i] < minN) minN = g[i];
}
int res = -1e9;
// 最后比较 在环内的数组大还是环外的大
res = max(sum - minN, maxN);
cout << res << endl;
return 0;
}

京公网安备 11010502036488号