https://coderun.yandex.ru/problem/bpproximate-binary-search/description Легкая

Решение

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

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

    val (n, k) = reader.readLine().trim().split("\\\\s+".toRegex()).map(String::toInt)
    
    val firstArray = reader.readLine().trim().split("\\\\s+".toRegex()).map(String::toInt)
    
    val secondArray = reader.readLine().trim().split("\\\\s+".toRegex()).map(String::toInt)

    fun findClosest(target: Int): Int {
        var left = 0
        var right = firstArray.size - 1

        while (left < right) {
            val mid = (left + right) / 2
            if (firstArray[mid] < target) left = mid + 1 else right = mid
        }

        if (left == 0) return firstArray[0]
        if (left == firstArray.size) return firstArray.last()

        val before = firstArray[left - 1]
        val after = firstArray[left]

        return if (abs(target - before) <= abs(after - target)) before else after
    }

    secondArray.forEach { writer.write("${findClosest(it)}\\n") }

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