跳转至

单调队列

#include<bits/stdc++.h>
#define Maxn 1000000
using namespace std;
int a[Maxn+5],q[Maxn+5];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",a+i);
    int h=1,t=0;
    for(int i=1;i<=n;i++)
    {
        while(h<=t&&a[q[t]]>=a[i]) t--;
        q[++t]=i;
        if(q[h]<i-m+1) h++;
        if(i>=m) printf("%d ",a[q[h]]);
    }
    puts("");
    h=1;
    t=0;
    for(int i=1;i<=n;i++)
    {
        while(h<=t&&a[q[t]]<=a[i]) t--;
        q[++t]=i;
        if(q[h]<i-m+1) h++;
        if(i>=m) printf("%d ",a[q[h]]);
    }
    return 0;
}