목차

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

ps
링크acmicpc.net/…
출처BOJ
문제 번호24060
문제명알고리즘 수업 - 병합 정렬 1
레벨실버 4
분류

분할정복

시간복잡도O(nlogn)
인풋사이즈n<=500,000
사용한 언어Python
제출기록89468KB / 416ms
최고기록416ms
해결날짜2022/09/19

풀이

코드

"""Solution code for "BOJ 24060. 알고리즘 수업 - 병합 정렬 1".

- Problem link: https://www.acmicpc.net/problem/24060
- Solution link: http://www.teferi.net/ps/problems/boj/24060
"""


def solve(n, k, nums):

    def solve_rec(beg, l):
        if l <= 1:
            return None
        half_len = (l + 1) // 2
        if (ret := solve_rec(beg, half_len)) is not None:
            return ret
        if (ret := solve_rec(beg + half_len, l - half_len)) is not None:
            return ret
        nonlocal k
        if k <= l:
            return sorted(nums[beg:beg + l])[k - 1]
        else:
            k -= l
            return None

    return solve_rec(0, n)


def main():
    N, K = [int(x) for x in input().split()]
    A = [int(x) for x in input().split()]

    answer = solve(N, K, A)
    print('-1' if answer is None else answer)


if __name__ == '__main__':
    main()