【模板】单调队列
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N];
int k,n;
inline int read()
{
char c=getchar();int x=0;bool minus=0;
for(;!isdigit(c);c=getchar())
if(c=='-')minus=1;
for(;isdigit(c);c=getchar())
x=x*10+c-'0';
if(minus)return -x;
else return x;
}
deque<int> Q;
inline void ins_min(int i)
{
while(!Q.empty()&&a[Q.back()]>=a[i])Q.pop_back();
Q.push_back(i);
while(!Q.empty()&&Q.front()<=i-k)Q.pop_front();
}
inline void ins_max(int i)
{
while(!Q.empty()&&a[Q.back()]<=a[i])Q.pop_back();
Q.push_back(i);
while(!Q.empty()&&Q.front()<=i-k)Q.pop_front();
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<k;i++)ins_min(i);
for(int i=k;i<=n;i++)
{
ins_min(i);
printf("%d ",a[Q.front()]);
}
Q.clear();
cout<<endl;
for(int i=1;i<k;i++)ins_max(i);
for(int i=k;i<=n;i++)
{
ins_max(i);
printf("%d ",a[Q.front()]);
}
return 0;
}