본문 바로가기

Coding/백준 온라인 저지 (Baekjoon Online Judge)

백준 온라인 저지(Baekjoon Online Judge) - 24060 : 알고리즘 수업 - 병합 정렬 1

https://www.acmicpc.net/problem/24060

 

24060번: 알고리즘 수업 - 병합 정렬 1

첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)

www.acmicpc.net

 

N, K = map(int, input().split())
A = list(map(int, input().split()))
trr = [0] * (N + 1)
cnt = ans = 0

def mergeSort(s, e):
    global cnt, ans

    if s >= e:
        return

    mid = (s + e) // 2
    mergeSort(s, mid)
    mergeSort(mid + 1, e)

    if cnt >= K:
        return

    i, j, k = s, mid + 1, s
    while i <= mid and j <= e:
        if A[i] <= A[j]:
            trr[k] = A[i]
            i += 1
        else:
            trr[k] = A[j]
            j += 1
        k += 1

    while i <= mid:
        trr[k] = A[i]
        i += 1
        k += 1

    while j <= e:
        trr[k] = A[j]
        j += 1
        k += 1

    for i in range(s, e + 1):
        A[i] = trr[i]

        cnt += 1
        if cnt == K:
            ans = A[i]
            return

mergeSort(0, N - 1)

if cnt < K:
    print("-1")
else:
    print(ans)