package main import ( "bufio" "fmt" "os" "strconv" ) func main() { for { scanner := bufio.NewScanner(os.Stdin) // 设置大缓冲区,防止大输入时出错 buf := make([]byte, 1024*1024) // 1MB scanner.Buffer(buf, 1024*1024) scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔) // 读取第一行:n scanner.Scan() num, _ := strconv.Atoi(scanner.Text()) if num == 0 { break } scanner.Scan() w, _ := strconv.Atoi(scanner.Text()) if num == 0 { break } arr := make([]int, num) for i := 0; i < num; i++ { scanner.Scan() arr[i], _ = strconv.Atoi(scanner.Text()) } window := []int{} res := []int{} for i := 0; i < len(arr); i++ { // eg1 17/20 // for len(window)>0 { // if arr[i] > arr[window[len(window)-1]] { // window = window[:len(window)-1] // } else { // break // } // } // eg2 19/20 l, r := 0, len(window)-1 for l <= r { mid := (r-l)/2 + l if arr[window[mid]] < arr[i] { r = mid - 1 } else { l = mid + 1 } } if len(window) > 0 { window = window[:l] } window = append(window, i) if i-window[0] == w { window = window[1:] } if i >= w-1 { res = append(res, window[0]) } } for i := 0; i < len(res); i++ { if i == len(res)-1 { fmt.Println(arr[res[i]]) } else { fmt.Printf("%d ", arr[res[i]]) } } } }