const maxn=1000002;
var f1,f2,a:array [1..maxn] of int64;
sumx,max,min:int64; tt:boolean; n,i,j,minx:longint;
begin
tt:=true;
minx:=-maxlongint;
readln(n);
sumx:=0;
for i:=1 to n do
begin
read(a[i]);
if a[i]>=0 then tt:=false;
if (a[i]<0) and (a[i]>minx) then minx:=a[i];
inc(sumx,a[i]);
end;
f1[1]:=a[1];
f2[1]:=a[1];
max:=0;
min:=maxlongint;
for i:=2 to n do
begin
if f1[i-1]>0 then
begin
f1[i]:=f1[i-1]+a[i];
if f1[i]>max then max:=f1[i];
end
else
begin f1[i]:=a[i];if f1[i]>max then max:=f1[i]; end;
if f2[i-1]<0 then
begin
f2[i]:=f2[i-1]+a[i];
if f2[i]<min then min:=f2[i];
end
else
begin f2[i]:=a[i];if f2[i]<min then min:=f2[i]; end;
end;
if max>0 then
if sumx-min>max then write(sumx-min) else write(max)
else if tt then write(minx) else write(0);
end.
有俩超时一个输出过长~~为什么?