Cod sursa(job #307141)

Utilizator mlazariLazari Mihai mlazari Data 23 aprilie 2009 11:14:31
Problema Deque Scor 60
Compilator fpc Status done
Runda Arhiva educationala Marime 0.96 kb
Program Deque;
var a,dq : array[0..5000000] of longint;
    n,k,p,u : longint;
    suma : int64;

procedure Citeste;
var Intrare : text;
    i : longint;
begin
  assign(Intrare,'deque.in');
  reset(Intrare);
  readln(Intrare,n,k);
  for i:=1 to n do readln(Intrare,a[i]);
  close(Intrare);
end;

procedure adauga(x : longint);
begin
  while (a[x]<a[dq[u]]) and (u>=p) do u:=u-1;
  u:=u+1;
  dq[u]:=x;
end;

function min(x : longint) : longint;
var minim : longint;
begin
  minim:=a[dq[p]];
  if x-k+1=dq[p] then p:=p+1;
  min:=minim;
end;

procedure Calculeaza;
var i : longint;
begin
  p:=1;
  u:=1;
  dq[0]:=1;
  dq[1]:=1;
  for i:=2 to k do adauga(i);
  suma:=min(k);
  for i:=k+1 to n do begin
    adauga(i);
    suma:=suma+min(i);
  end;
end;

procedure Scrie;
var Iesire : text;
begin
  assign(Iesire,'deque.out');
  rewrite(Iesire);
  write(Iesire,suma);
  close(Iesire);
end;

begin
  Citeste;
  Calculeaza;
  Scrie;
end.