给你一个长度为N的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右移动一位,如下表:
你的任务是找出窗口在各位置时的max value,min value.
Input
第1行n,k,第2行为长度为n的数组
Output
2行,第1行每个位置的min value,第2行每个位置的maxvalue
Sample Input
8 3
1 3 -1 -3 5 3 6 7
Sample Output
-1 -3 -3 -3 3 3
3 3 5 5 6 7
const
maxn=1000000;
var
n,m,i:longint;
a:array[1..maxn] of longint;
ma,mi:array [1..maxn] of longint;
procedure dmax(var x,dx:longint);
varj:longint;
begin
x:=-maxlongint;
forj:=i-m+1 to i do
begin
ifa[j]>=x then
begin
x:=a[j];
dx:=j;
end;
end;
end;
procedure dmin(var y,dy:longint);
varj:longint;
begin
y:=maxlongint;
forj:=i-m+1 to i do
begin
ifa[j]<=y then
begin
y:=a[j];
dy:=j;
end;
end;
end;
procedure init;
var j,x,y,dx,dy:longint;
begin
read(n,m);
fori:=1 to n do
read(a[i]);
i:=m;
dmax(x,dx); dmin(y,dy);
ma[i]:=x; mi[i]:=y;
fori:=m+1 to n do
begin
ifdx<=i-m then dmax(x,dx);
ifdy<=i-m then dmin(y,dy);
ifa[i]>=x then
begin
x:=a[i];
dx:=i;
end;
ifa[i]<=y then
begin
y:=a[i];
dy:=i;
end;
ma[i]:=x; mi[i]:=y;
end;
end;
procedure main;
begin
fori:=m to n do
write(mi[i],'');
writeln;
fori:=m to n do
write(ma[i],'');
end;
begin
init;
main;
end.