题目
思路
单调队列模板题
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,k,a[1000010],minn[1000010],maxn[1000010];
int q[1000010];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
int hd=1,tl=0;
for(int i=1; i<=n; i++)
{
while(hd<=tl&&i-q[hd]+1>k)
hd++;
while(hd<=tl&&a[q[tl]]>=a[i])
tl--;
q[++tl]=i;
minn[i]=a[q[hd]];
}
for(int i=k; i<=n; i++)
printf("%d ",minn[i]);
printf("\n");
hd=0,tl=1;
memset(q,0,sizeof(q));
for(int i=1; i<=n; i++)
{
while(hd<=tl&&i-q[hd]+1>k)
hd++;
while(hd<=tl&&a[q[tl]]<=a[i])
tl--;
q[++tl]=i;
maxn[i]=a[q[hd]];
}
for(int i=k; i<=n; i++)
printf("%d ",maxn[i]);
return 0;
}