Задача из ru_programming: в заданном массиве целых чисел найти (непустой) отрезок с максимальной суммой. Массив разрешается просматривать всего один раз. Дополнительную память (массивы) использовать нельзя.
Нетерпеливые могут посмотреть решение здесь.
Нетерпеливые могут посмотреть решение здесь.

Comments
k:=0; lastmax:=0; totalmax:=0;
{lastmax=максимальная сумма по отрезкам, примыкающим к концу a[1..k], totalmax=максимальная сумма по всем отрезкам}
while (k not equal to n) do begin
k:=k+1;
lastmax:=max(lastmax+a[k],0);
totalmax:=max(lastmax,totalmax);
end;
lastmax:=(a[1],1,1);
totalmax:=lastmax;
{last,totalmax = (value, first, last)
for maximal sums at the end and in total}
while (k not equal to n) do begin
k:=k+1;
if lastmax.1 less than 0 then begin
lastmax.1:=a[k];
lastmax.2:=k;
lastmax.3:=k;
end else begin
lastmax.1 := lastmax.1+a[k];
lastmax.3 := k;
end;
if lastmax.1 GT totalmax.1 then begin
totalmax:=lastmax;
end;
end;
Чтобы вычитать покинутое, придётся крутить цикл в цикле и иметь массив сумм для всех длин отрезков от 1 до N.