#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param a int整型一维数组 
# @param n int整型 
# @param K int整型 
# @return int整型
#
class Solution:
    def findKth(self , a: List[int], n: int, K: int) -> int:
        # write code here
        def heapify(arr, n, i):
            """
            维护一个父节点为i的最小堆
            """
            l = 2*i + 1
            r = 2*i + 2
            small = i
            if l<n and arr[l] < arr[small]:
                small = l
            if r<n and arr[r] < arr[small]:
                small = r
            if i != small:
                arr[small], arr[i] = arr[i], arr[small]
                heapify(arr, n, small)
            
        def buildMinHeap(arr, K):
            """
            构建前k个元素的最小堆
            """
            n = len(arr)
            last_parent = (K-1)//2
            for i in range(last_parent, -1, -1):
                heapify(arr, K, i)
        
        def updateHeap(arr, item):
            """
            item比堆顶大,更新最小堆
            """
            if item > arr[0]:
                arr[0] = item
                heapify(arr, K, 0)
                
        buildMinHeap(a, K)
        for item in range(K, n):
            updateHeap(a, a[item])
            
        """
        最大的k个元素生成的最小堆,堆顶就是第k大
        """
        return a[0]