Skip to content

Commit 5b4e1a7

Browse files
committed
CT_402
1 parent 020508a commit 5b4e1a7

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package S4
2+
3+
var K: Int = 0
4+
5+
fun main() {
6+
val (N, k) = readLine()!!.split(" ").map { it.toInt() }
7+
K = k
8+
9+
val A = readLine()!!.split(" ").map { it.toInt() }.toIntArray()
10+
val tmp = IntArray(N) { 0 }
11+
12+
print(if (merge_sort(A, tmp, 0, N - 1)) A.joinToString(" ") else -1)
13+
}
14+
15+
fun merge_sort(A: IntArray, tmp: IntArray, p: Int, r: Int): Boolean {
16+
17+
if (p < r) {
18+
val q = (p + r) / 2
19+
if (merge_sort(A, tmp, p, q) || merge_sort(A, tmp, q + 1, r) || merge(A, tmp, p, q, r)) return true
20+
}
21+
22+
return false
23+
}
24+
25+
fun merge(A: IntArray, tmp: IntArray, p: Int, q: Int, r: Int): Boolean {
26+
var i = p
27+
var j = q + 1
28+
var t = p
29+
30+
while (i <= q && j <= r) {
31+
tmp[t++] = if (A[i] <= A[j]) A[i++] else A[j++]
32+
}
33+
34+
while (i <= q) {
35+
tmp[t++] = A[i++]
36+
}
37+
38+
while (j <= r) {
39+
tmp[t++] = A[j++]
40+
}
41+
42+
for (k in p..r) {
43+
A[k] = tmp[k]
44+
if (--K == 0) return true
45+
}
46+
47+
return false
48+
}

0 commit comments

Comments
 (0)