#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],q[N],hh=0,tt=-1;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
if(hh<=tt&&i-q[hh]+1>k)hh++;
while(hh<=tt&&a[i]<=a[q[tt]])tt--;
q[++tt]=i;
if(i+1>=k)
cout<<a[q[hh]]<<' ';
}
cout<<'\n';
for(int i=0;i<n;i++)
{
if(hh<=tt&&i-q[hh]+1>k)hh++;
while(hh<=tt&&a[i]>=a[q[tt]])tt--;
q[++tt]=i;
if(i+1>=k)
cout<<a[q[hh]]<<' ';
}
return 0;
}
注意点:1.入队一定要在输出前,因为你不知道新入队的元素是不是要输出的值
2.求最大值和求最小值是对称操作,只要改一个操作符就行了
3.注意输出的是队头元素。比如求最小值,我们希望得到一个单调递增队列,那么最小值就是这个队列第一个元素(队头元素)