Cod sursa(job #268770)

Utilizator MBlueGheorghevici Mihai MBlue Data 1 martie 2009 19:42:03
Problema Subsecventa de suma maxima Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.47 kb
type refele = ^elemnt;
     elemnt = record
              val : longint;
              nrel : integer;
              besti : longint;
              urm : refele;
              end;
var fin,fout : text;
    primu,el,ultimu,maxim : refele;
    N,i,s,pi,nrel,besti1,j : longint;
procedure max(a,b : longint);
begin
     if a > b then begin
                   el^.besti := a;
                   el^.nrel := ultimu^.nrel +1;
                   end
              else begin
                   el^.besti := b;
                   el^.nrel := 1;
                   end;
end;
begin
     assign(fin,'ssm.in');
     reset(fin);
     assign(fout,'ssm.out');
     rewrite(fout);
     read(fin,N);
     primu := nil;
     ultimu := nil;
     for i := 1 to n do begin
         new(el);
         read(fin,el^.val);
         el^.urm := nil;
         if primu = nil then begin
            primu := el;
            ultimu := el;
            el^.besti := el^.val;
            el^.nrel := 1;
         end
         else begin
              max(ultimu^.besti + el^.val,el^.val);
              ultimu^.urm := el;
              ultimu := el;
         end;
     end;
     close(fin);
     el := primu;
     maxim := el;
     for i := 2 to n do begin
         el := el^.urm;
         if el^.besti > maxim^.besti then begin
            maxim := el;
            j := i;
         end;
     end;
     writeln(fout,maxim^.besti,' ',j - maxim^.nrel +1,' ',j);
     close(fout);
end.