Cod sursa(job #50894)

Utilizator fc_oni_cu_50_pctAnul asta in play-out fc_oni_cu_50_pct Data 9 aprilie 2007 12:30:37
Problema Secventa Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.35 kb
program tribute_to_mars;
type pnod=^nod;
     nod=record
        inf,ind,cate:longint;
        as,ad:pnod;
        end;
var prim,ultim,nou,p,q:pnod;
    f,g:text;
    n,x,k,i,min,ps,pf,r:longint;
begin
assign(f,'secventa.in'); reset(f);
assign(g,'secventa.out'); rewrite(g);
read(f,n,k);
new(prim); new(ultim);
prim^.ad:=ultim;
ultim^.as:=prim;
read(f,x);
new(nou);
ultim^.inf:=x;
ultim^.ind:=1;
ultim^.cate:=0;
ultim^.ad:=nou;
nou^.as:=ultim;
ultim:=nou;
min:=-30000;
for i:=2 to n do begin
     read(f,x);
     if x>=ultim^.as^.inf then begin
                         new(nou);
                         ultim^.inf:=x;
                         ultim^.ind:=i;
                         ultim^.cate:=0;
                         ultim^.ad:=nou;
                         nou^.as:=ultim;
                         ultim:=nou;
                         end
                         else begin
                         p:=ultim^.as;
                         while (p<>prim) and (p^.inf>x) do begin
                         q:=p;
                         p:=p^.as;
                         p^.ad:=q^.ad;
                         q^.ad^.as:=p;
                         r:=i-q^.ind+q^.cate;
                         dispose(q);
                         end;
                         new(nou);
                         ultim^.inf:=x;
                         ultim^.ind:=i;
                         ultim^.cate:=r;
                         ultim^.ad:=nou;
                         nou^.as:=ultim;
                         ultim:=nou;
                          end;
                         {Sa fie in ultimele k}
                         p:=prim^.ad;
                         while (p<>ultim) and (i-p^.ind>k-1) do begin
                        q:=p;
                        p:=p^.ad;
                        q^.as^.ad:=p;
                        p^.as:=q^.as;
                        dispose(q);
                        end;
                      p:=prim^.ad;
                      if p^.inf>min then
                                    if p^.cate+(i-p^.ind+1)>=k then begin
                                       min:=p^.inf;
                                       ps:=p^.ind-p^.cate;
                                       pf:= ps+k-1;
                                       end;



end;
writeln(g,ps,' ',pf,' ',min);
close(f); close(g);
end.