https://coderun.yandex.ru/problem/nearest-bus-stop/description Легкая

Решение

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

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Читаем входные данные
    val (n, k) = reader.readLine().split(" ").map { it.toInt() }
    val stops = reader.readLine().split(" ").map { it.toLong() }
    val queries = reader.readLine().split(" ").map { it.toLong() }

    // Обрабатываем каждый запрос
    for (x in queries) {
        // Бинарный поиск ближайшей остановки
        var left = 0
        var right = n - 1
        
        while (left <= right) {
            val mid = (left + right) / 2
            if (stops[mid] == x) {
                // Если нашли точное совпадение, ищем минимальный индекс
                var result = mid
                while (result > 0 && stops[result - 1] == x) {
                    result--
                }
                writer.write("${result + 1}\\n")
                break
            } else if (stops[mid] < x) {
                left = mid + 1
            } else {
                right = mid - 1
            }
        }
        
        // Если точного совпадения нет
        if (left > right) {
            val leftIndex = right  // последняя остановка слева
            val rightIndex = left  // первая остановка справа
            
            when {
                // Нет остановок слева
                leftIndex < 0 -> writer.write("${rightIndex + 1}\\n")
                // Нет остановок справа
                rightIndex >= n -> writer.write("${leftIndex + 1}\\n")
                else -> {
                    val leftDist = x - stops[leftIndex]
                    val rightDist = stops[rightIndex] - x
                    
                    when {
                        // Одинаковое расстояние до левой и правой
                        leftDist == rightDist -> writer.write("${leftIndex + 1}\\n")
                        // Ближе левая
                        leftDist < rightDist -> writer.write("${leftIndex + 1}\\n")
                        // Ближе правая
                        else -> writer.write("${rightIndex + 1}\\n")
                    }
                }
            }
        }
    }

    reader.close()
    writer.close()
}