Cod sursa(job #287653)

Utilizator florin_marius90Florin Marius Popescu florin_marius90 Data 25 martie 2009 00:21:06
Problema Deque Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.73 kb
type  elem=^nod ;
      nod= record
          x:longint;
          next:elem;
          end;
var  p,d,cap,ultim,z,poin:elem;
     ok:boolean;
     i,n,k,a,sum:longint;
     f,g:text;
begin
assign(f,'deque.in'); assign(g,'deque.out');
reset(f); rewrite(g);
readln(f,n,k); readln(f,a);
new(p);
p^.x:=a; p^.next:=nil;
cap:=p;
ultim:=p;
for i:=2 to k do  begin
 readln(f,a); ok:=true;  poin:=cap;
   while ok and (poin<>nil) do
    if poin^.x<=a then begin ok:=false; new(z); z^.x:=a; z^.next:=poin;
                            cap:=z;  end
                 else begin d:=poin; cap:=poin^.next; poin:=poin^.next;
                            dispose(d); end;
    if poin=nil then begin new(z); z^.x:=a; z^.next:=poin;
                            cap:=z;  ultim:=z;   end;
 end;
 sum:=ultim^.x; poin:=cap;
  if cap^.next=nil then begin d:=cap; cap:=poin^.next; dispose(d); end else
begin  while  poin^.next^.next<>nil do
     poin:=poin^.next;
     d:=ultim; ultim:=poin^.next; dispose(d); end;


 for i:=k+1 to n do
  begin
  readln(f,a);
  ok:=true;  poin:=cap;
   while ok and (poin<>nil) do
    if poin^.x<=a then begin ok:=false; new(z); z^.x:=a; z^.next:=poin;
                            cap:=z;  end
                 else begin d:=poin; cap:=poin^.next; poin:=poin^.next;
                            dispose(d); end;
    if poin=nil then begin new(z); z^.x:=a; z^.next:=poin;
                            cap:=z;  ultim:=z;    end;

  sum:=sum+ultim^.x;
  poin:=cap;
  if cap^.next=nil then begin d:=cap; cap:=poin^.next; dispose(d); end else
begin  while  poin^.next^.next<>nil do
     poin:=poin^.next;
     d:=ultim; ultim:=poin^.next; dispose(d); end;

  end;
  write(g,sum);
  close(f); close(g);





end.