class Solution {
private:
    priority_queue<int, vector<int>, less<int>> max_pq; // 大顶堆
    priority_queue<int, vector<int>, greater<int>> min_pq; // 小顶堆
public:
    void Insert(int num) {
        if(max_pq.empty()){
            max_pq.push(num);
            return;
        }
        if(max_pq.top() < num){
            min_pq.push(num);
        }
        else{
            max_pq.push(num);
        }
        
        if(max_pq.size() > min_pq.size()+1){
            while(max_pq.size() > min_pq.size()+1){
                int val = max_pq.top();
                max_pq.pop();
                min_pq.push(val);
            }
        }
        else if (max_pq.size() < min_pq.size()) {
            while(max_pq.size() < min_pq.size()){
                int val = min_pq.top();
                min_pq.pop();
                max_pq.push(val);
            }
        }
        
    }

    double GetMedian() { 
        if((max_pq.si***_pq.size()) % 2 == 0){
            double a = max_pq.top();
            double b = min_pq.top();
            return (a+b)/2;
        }
        
        double a = max_pq.top();
        return a;
        
    }

};