题意
给出一段序列,选出其中连续且非空的一段使得这段和最大。
分析
一个一个加,只要判断总和会不会小于0就行,小于0就接着往下重新计算和,因为如果所有数据里有正数的话,单个正数肯定更大,而如果都是负数的话,单个负数也比负数和大。
var
n,i,t,m:longint;
a:array[0..200000]of longint;
begin
readln(n);
for i:=1 to n do
read(a[i]);
t:=0;
m:=-maxlongint;
for i:=1 to n do
begin
t:=t+a[i];
if t>m then m:=t;
if t<0 then t:=0;
end;
write(m);
end.