https://coderun.yandex.ru/problem/minimum-of-the-segment/description Средняя

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.ArrayDeque

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    
    val input = reader.readText().split("\\\\s+".toRegex()).filter { it.isNotEmpty() }
    var index = 0
    val n = input[index++].toInt()
    val k = input[index++].toInt()
    
    val arr = IntArray(n) { input[index++].toInt() }
    
    val deque = ArrayDeque<Int>(n)
    val sb = StringBuilder()
    
    for (i in 0 until n) {
        while (deque.isNotEmpty() && deque.first() <= i - k) {
            deque.removeFirst()
        }
        
        while (deque.isNotEmpty() && arr[deque.last()] >= arr[i]) {
            deque.removeLast()
        }
        
        deque.addLast(i)
        
        if (i >= k - 1) {
            sb.append(arr[deque.first()]).append("\\n")
        }
    }
    
    writer.write(sb.toString())
    writer.flush()
    
    reader.close()
    writer.close()
}