我的代码
#include<iostream>
#include<stdio.h>
using namespace std;
const int N=1e6+5;
int a[N],q[N];
//q数组存储索引
int main()
{
int n,k;
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
int hh=0,tt=-1;
for(int i=0;i<n;i++)
{//输出最小值
if(hh<=tt && i-k+1>q[hh])hh++;
while(hh<=tt && a[q[tt]]>=a[i])tt--;
q[++tt]=i;//入队
if(i>=k-1)printf("%d ",a[q[hh]]);
}
puts("");//换行
hh=0,tt=-1;
for(int i=0;i<n;i++)
{//输出最大值
if(hh<=tt && i-k+1>q[hh])hh++;
while(hh<=tt && a[q[tt]]<=a[i])tt--;
q[++tt]=i;
if(i>=k-1)printf("%d ",a[q[hh]]);
}
return 0;
}