Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.HashMap
import kotlin.math.max
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val firstLine = reader.readLine().split(" ")
val n = firstLine[0].toInt()
val d = firstLine[1].toLong()
val coordinates = reader.readLine().split(" ").map { it.toInt() }
val students = mutableListOf<Pair<Int, Int>>()
for (i in 0 until n) {
students.add(Pair(coordinates[i], i))
}
students.sortBy { it.first }
val assignedTickets = IntArray(n)
val lastUsedCoordinate = HashMap<Int, Int>()
var maxTicketUsed = 0
for (studentData in students) {
val currentCoord = studentData.first
val originalIndex = studentData.second
var currentTicket = 1
while (true) {
val lastCoord = lastUsedCoordinate.getOrDefault(currentTicket, veryFarAwayCoordinate.toInt())
if (currentCoord.toLong() - lastCoord.toLong() > d) {
break
}
currentTicket++
}
assignedTickets[originalIndex] = currentTicket
lastUsedCoordinate[currentTicket] = currentCoord
maxTicketUsed = max(maxTicketUsed, currentTicket)
}
writer.write("$maxTicketUsed\\n")
writer.write(assignedTickets.joinToString(" "))
writer.newLine()
reader.close()
writer.close()
}