algo jest dosc znany ... podobnie jak ten problem.
int sum = 0
int wsk = 0
int wynik = 0
sum oznacza ile wynosi suma z obrabianego kawalka.
wynik oznacza jaki wynik daje program/funckja whatever.
wsk - w ktorym miejscu tablicy jestesmy.
Zczytujemy wejscie do tablicy.
(teraz widze ze kolejnym minusem tych testow jest to ze nie ma na poczatku podanej liczby elementow i trzeba dawac wielkosc na sztywno, lub powiekszac tablice dynamiczne, ale to jest chyba za trudne jak na liceum).
Tak wiec sila rzeczy robimy tablice np. 10000 elem. i musimy miec oddzielnie przechowywana jej wielkosc. Inicjalizujemy zerami. Wtedy zczytujemy i ustawiamy wielkosc.
Lecimy od poczatku tablicy. Jezeli napotkany element jest >=0 to dodajemy do sum i idziemy dalej (o ile nie koniec). Jesli napotkany elem. jest <0 to sprawdzamy czy sum > wynik, jezeli tak to wynik := sum, sum := sum + napotkany_el, jezeli sum < 0 to sum:=0 i jezeli nie koniec idziemy dalej.
Nie sprawdzalem tego ale na szybko wydaje sie byc dobre i szybkie.
EDIT: Napisanie tego koncepcyjnie zajelo 10 min. Zakodowanie do 60 min (zalezy od tego jak kto sobie poradzi z tym wejsciem. U nas preferowane jest podawanie niezbednych wielkosci w pierwszym wierszu, co umozliwia deklaracje odpowiednich struktur i zmiennych sterujacych petlami, ale da sie to zrobic 'na chama' zczytujac az do bledu czy EOF i zliczajac ready/scany whatever

).
EDIT2: mozna zrobic jeszcze tak, ze otwieramy plik, robimy ready i liczymy ile elem. Zamykamy, mallocujemy tablice taka jak trzeba i otwieramy plik ponownie, wiedzac juz ile trzeba zczytac, ale to juz chyba przerost formy nad trescia - szczegolnie jak masz dane testy ktore beda wykonywane na algo