题目链接:https://loj.ac/problem/10175
题目大意:


#include <bits/stdc++.h>
#define LL long long
using namespace std;

int a[2000005];
struct node{
    int w, i;
}q1[2000005];

int main()
{
    int n, k;
    scanf("%d%d", &n, &k);
    for(int i=1; i<=n; i++){
        scanf("%d", &a[i]);
    }
    int L1=1, R1=0;
    for(int i=1; i<=k-1; i++){
        while(L1<=R1&&q1[R1].w>=a[i]){
            R1--;
        }
        q1[++R1]=node{a[i], i};
    }
    for(int i=k; i<=n; i++){
        while(L1<=R1&&i-q1[L1].i>=k){
            L1++;
        }
        while(L1<=R1&&q1[R1].w>=a[i]){
            R1--;
        }
        q1[++R1]=node{a[i], i};
        printf("%d ", q1[L1].w);
    }
    printf("\n");

    L1=1, R1=0;
    for(int i=1; i<=k-1; i++){
        while(L1<=R1&&q1[R1].w<=a[i]){
            R1--;
        }
        q1[++R1]=node{a[i], i};
    }
    for(int i=k; i<=n; i++){
        while(L1<=R1&&i-q1[L1].i>=k){
            L1++;
        }
        while(L1<=R1&&q1[R1].w<=a[i]){
            R1--;
        }
        q1[++R1]=node{a[i], i};
        printf("%d ", q1[L1].w);
    }
    printf("\n");

    return 0;
}