技巧
    滑动窗口(双端单调队列)
思路
    这个问题一上来其实就知道是滑动窗口
    奈何coding能力太差搞了半天。。。
    其实需要注意的是要时刻保持单调性 后面进来的如果优于之前的。 那么之前的全都得淘汰(可以想象成年前而且能力强的)
     再者需要注意如何找到淘汰的元素
    属于一个coding题。。。
实现
package main

import (
	"bufio"
	. "fmt"
	"io"
	"os"
)

// https://ac.nowcoder.com/acm/problem/50528
func NC50528(_r io.Reader, _w io.Writer) {
	in, out := bufio.NewReader(_r), bufio.NewWriter(_w)
	defer out.Flush()
	var N, K int
	Fscan(in, &N, &K)
	a := make([]int, N)
	for i := 0; i < N; i++ {
		Fscan(in, &a[i])
	}
	// ------------------------------------------------------
	tmp := make([]int, N)    
	l, r := 0, 0
	for i := 0; i < N; i++ {
		for r > l && a[i] <= a[tmp[r-1]] {
			r--
		}
		tmp[r] = i; r++
		
        if i - tmp[l] >= K{
            l++
        }
		if i >= K-1 {
            if i == K-1 {
                 Fprint(out, a[tmp[l]])
            }else {
                Fprint(out, " ", a[tmp[l]])
            }
			
		}
	}
    Fprintln(out)
    
    l, r = 0, 0
	for i := 0; i < N; i++ {
		for r > l && a[i] >= a[tmp[r-1]] {
			r--
		}
		tmp[r] = i; r++
		
        if i - tmp[l] >= K{
            l++
        }
		if i >= K-1 {
            if i == K-1 {
                 Fprint(out, a[tmp[l]])
            }else {
                Fprint(out, " ", a[tmp[l]])
            }
			
		}
	}
	// ------------------------------------------------------

}

func main() {
	NC50528(os.Stdin, os.Stdout)
}