https://coderun.yandex.ru/problem/normalization-of-indicators/description Средняя

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.abs

// Функция для поиска ближайшего канонического значения с помощью бинарного поиска
fun findClosestCanonical(values: IntArray, query: Int): Int {
    var left = 0
    var right = values.size - 1
    var best = values[0] // Изначально берем первый элемент как наилучший

    while (left <= right) {
        val mid = (left + right) / 2

        // Обновляем наилучший вариант, если нашли более близкое значение
        if (abs(values[mid] - query) < abs(best - query)) {
            best = values[mid]
        }

        // Двигаемся в сторону уменьшения разницы
        if (values[mid] < query) {
            left = mid + 1
        } else {
            right = mid - 1
        }
    }

    return best
}

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

    val n = reader.readLine().toInt() // Читаем количество канонических значений
    val canonical = reader.readLine().split(" ").map { it.toInt() }.sorted().toIntArray() // Сортируем канонические значения
    val m = reader.readLine().toInt() // Читаем количество запросов

    // Для каждого запроса ищем ближайшее каноническое значение
    repeat(m) {
        val query = reader.readLine().toInt()
        writer.write("${findClosestCanonical(canonical, query)}\\n")
    }

    writer.flush()
    reader.close()
    writer.close()
}