import java.util.*;


public class Solution {
    private PriorityQueue<Integer> pq1;
    private PriorityQueue<Integer> pq2;
    public Solution() {
        this.pq1 = new PriorityQueue<>((o1, o2)->o2 - o1);
        this.pq2 = new PriorityQueue<>();
    }

    public void Insert(Integer num) {
        if (!pq1.isEmpty() && num <= pq1.peek())
            pq1.add(num);
        else
            pq2.add(num);
        int numToTrans = pq2.size() - pq1.size();
        if (numToTrans == 2) {
            pq1.add(pq2.poll());
        }
        numToTrans = pq1.size() - pq2.size();
        if (numToTrans == 2) {
            pq2.add(pq1.poll());
        }
    }

    public Double GetMedian() {
        if (pq1.size() == pq2.size()) return 1.0 * (pq1.peek() + pq2.peek()) / 2;
        else return pq1.size() > pq2.size() ? 1.0 * pq1.peek() : 1.0 * pq2.peek();
    }
}