# -*- coding:utf-8 -*-
class Solution:
    def __init__(self) -> None:
        self.nums = []
        # self.mid_nums = []
        self.mid = 0

    # 大顶堆
    def adjust_max_heap(self, pos, length):
        dad = pos
        son = pos * 2 + 1
        while son < length:
            if son + 1 < length and self.nums[son+1] > self.nums[son]:
                son += 1
            if self.nums[dad] < self.nums[son]:
                self.nums[dad], self.nums[son] = self.nums[son], self.nums[dad]
                dad = son
                son = dad * 2 + 1
            else:
                break

    def Insert(self, num):
        # write code here
        self.nums.append(num)
        n = len(self.nums)
        if n == 1:
            # self.mid_nums.append(num)
            return
        self.mid = n // 2
        for i in range(n // 2 -1,-1,-1):
            self.adjust_max_heap(i, n)
        # 全堆排超时 只需要排一半就行
        # -2 -3都行 -1 不行 左闭右开 
        for j in range(n-1,self.mid - 2,-1):
            self.nums[0], self.nums[j] = self.nums[j], self.nums[0]
            self.adjust_max_heap(0, j)
    def GetMedian(self):
        # write code here
        n = len(self.nums)
        if n == 1:
            return self.nums[0]
        if n % 2 == 0:
		#  大堆 后面的才排序 
            return (self.nums[self.mid] + self.nums[self.mid - 1]) / 2
        else:
            return self.nums[self.mid]