Pagini recente » Cod sursa (job #1138711) | Borderou de evaluare (job #367022) | Cod sursa (job #529174) | Cod sursa (job #2349581) | Cod sursa (job #307141)
Cod sursa(job #307141)
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.