poj 2823 window
分析:经典的队列应用,实现N的最大最小查找。
var
a,q:array[0..1000000] of longint;
i,j,head,tail,n,m:longint;
begin
readln(n,m);
for i:=1 to n do read(a[i]);
head:=1; tail:=1; q[1]:=1;
for i:=2 to m-1 do
begin
while (head<=tail)and(a[q[tail]]>=a[i]) do dec(tail);
inc(tail);
q[tail]:=i;
end;
for i:=m to n do
begin
while (head<=tail)and(q[head]<=i-m) do inc(head);
while (head<=tail)and(a[q[tail]]>=a[i]) do dec(tail);
inc(tail);
q[tail]:=i;
write(a[q[head]],' ');
end;
writeln;
head:=1; tail:=1; q[1]:=1;
for i:=2 to m-1 do
begin
while (head<=tail)and(a[q[tail]]<=a[i]) do dec(tail);
inc(tail);
q[tail]:=i;
end;
for i:=m to n do
begin
while (head<=tail)and(q[head]<=i-m) do inc(head);
while (head<=tail)and(a[q[tail]]<=a[i]) do dec(tail);
inc(tail);
q[tail]:=i;
write(a[q[head]],' ');
end;
writeln;
end.
浙公网安备 33010602011771号