思路:
单调队列板题
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
int n, k;
int a[1010000], q[1010000], tail, head;
int main()
{
scanf("%d%d", &n, &k);
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
head=1, tail=0;
for(int i=1; i<=n; i++)
{
while(head<=tail&&q[head]<i-k+1)
head++;
while(tail>=head&&a[i]<a[q[tail]])
tail--;
q[++tail]=i;
if(i>=k)
printf("%d ", a[q[head]]);
}
printf("\n");
head=1, tail=0;
for(int i=1; i<=n; i++)
{
while(head<=tail&&q[head]<i-k+1)
head++;
while(tail>=head&&a[i]>a[q[tail]])
tail--;
q[++tail]=i;
if(i>=k)
printf("%d ", a[q[head]]);
}
return 0;
}