https://coderun.yandex.ru/problem/nvp-with-response-recovery/description Средняя

Решение

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

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    
    val n = reader.readLine().trim().toInt()
    val sequence = reader.readLine().trim().split("\\\\s+".toRegex()).map { it.toInt() }.toIntArray()
    
    if (n == 0) {
        writer.write("")
        writer.close()
        return
    }
    
    val dp = IntArray(n) { 1 }
    val prev = IntArray(n) { -1 }
    
    for (i in 1 until n) {
        for (j in 0 until i) {
            if (sequence[i] > sequence[j] && dp[j] + 1 > dp[i]) {
                dp[i] = dp[j] + 1
                prev[i] = j
            }
        }
    }
    
    var maxLen = dp[0]
    var endIndex = 0
    for (i in 1 until n) {
        if (dp[i] >= maxLen) {
            maxLen = dp[i]
            endIndex = i
        }
    }
    
    val result = mutableListOf<Int>()
    var currentIndex = endIndex
    while (currentIndex != -1) {
        result.add(sequence[currentIndex])
        currentIndex = prev[currentIndex]
    }
    
    writer.write(result.reversed().joinToString(" "))
    writer.flush()
    
    reader.close()
    writer.close()
}