fun main() { val t = readLine()!!.toInt() for (i in 1..t) { print("Case #$i: ") solve() } } fun solve() { val (n, k) = readLine()!!.split(' ').map(String::toInt) val a = readLine()!!.split(' ').map(String::toInt).withIndex().sortedBy { it.value } val dpb = Array(n) { IntArray(2) } dpb[0][1] = 1 var ukb = -1 for (i in 1 until n) { while (a[ukb + 1].value + k <= a[i].value) ukb++ dpb[i][0] = maxOf(dpb[i - 1][0], dpb[i - 1][1]) dpb[i][1] = 1 + if (ukb >= 0) maxOf(dpb[ukb][0], dpb[ukb][1]) else 0 } val dpe = Array(n) { IntArray(2) } dpe[n - 1][1] = 1 var uke = n for (i in n - 2 downTo 0) { while (a[uke - 1].value - k >= a[i].value) uke-- dpe[i][0] = maxOf(dpe[i + 1][0], dpe[i + 1][1]) dpe[i][1] = 1 + if (uke < n) maxOf(dpe[uke][0], dpe[uke][1]) else 0 } val ans = IntArray(n) for (i in 0 until n) ans[a[i].index] = dpb[i][1] + dpe[i][1] - 1 println(ans.joinToString(separator = " ")) }