https://coderun.yandex.ru/problem/great-lineland-migration/description Средняя

Решение

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

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val n = reader.readLine().toInt() // Количество городов
    val prices = reader.readLine().trim().split(" ").map(String::toInt) // Средние цены проживания

    val stack = Stack<Int>()
    val result = IntArray(n) { -1 }

    for (i in 0 until n) {
        // Ищем город с меньшей ценой, чем текущий
        while (stack.isNotEmpty() && prices[stack.peek()] > prices[i]) {
            result[stack.pop()] = i
        }
        stack.push(i)
    }

    // Выводим номера городов для переселения
    writer.write(result.joinToString(" "))

    reader.close()
    writer.close()
}