dp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
double a[maxn];
int n;
double calc(double k) {
double res1 = 0; //正最大
double res2 = 0; //负最大
double sum1 = 0, sum2 = 0;//当前正负最大
for (int i = 1; i <= n; i++) {
sum1 = max(sum1 + a[i]+k, a[i]+k);
res1 = max(sum1, res1);
sum2 = min(sum2 + a[i]+k, a[i]+k);
res2 = min(sum2, res2);
}
return max(fabs(res1), fabs(res2));
}