https://coderun.yandex.ru/problem/relatable-counter Средняя

Решение

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

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

    val (n, k, r) = reader.readLine().split(" ").map { it.toInt() }
    val aParts = reader.readLine().split(" ")
    val a = LongArray(n) { i -> aParts[i].toLong() }

    val smallMap = TreeMap<Long, Int>()
    val largeMap = TreeMap<Long, Int>()
    var sumSmall = 0L

    for (i in 0 until k) {
        val x = a[i]
        smallMap[x] = smallMap.getOrDefault(x, 0) + 1
        sumSmall += x
    }
    for (i in k until n) {
        val x = a[i]
        largeMap[x] = largeMap.getOrDefault(x, 0) + 1
    }

    repeat(r) {
        val S = sumSmall
        val xEntry = smallMap.firstEntry()
        val x = xEntry.key
        if (xEntry.value == 1) smallMap.remove(x) else smallMap[x] = xEntry.value - 1
        sumSmall -= x

        largeMap[S] = largeMap.getOrDefault(S, 0) + 1

        val yEntry = largeMap.firstEntry()
        val y = yEntry.key
        if (yEntry.value == 1) largeMap.remove(y) else largeMap[y] = yEntry.value - 1
        smallMap[y] = smallMap.getOrDefault(y, 0) + 1
        sumSmall += y
    }

    val sb = StringBuilder()
    for ((value, count) in smallMap) {
        repeat(count) { sb.append(value).append(' ') }
    }
    for ((value, count) in largeMap) {
        repeat(count) { sb.append(value).append(' ') }
    }
    if (sb.isNotEmpty()) sb.setLength(sb.length - 1)
    writer.write(sb.toString())
    writer.newLine()
    writer.flush()
}