package cracking_the_coding_interview.ch_17;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class ContinuousMedian {

    private final Queue<Integer> left;
    private final Queue<Integer> right;
    private boolean isEven;

    public ContinuousMedian() {
        this.left = new PriorityQueue<>(Comparator.reverseOrder());
        this.right = new PriorityQueue<>(Comparator.naturalOrder());
        this.isEven = true;
    }

    public void addNum(int num) {
        if (isEven) {
            right.add(num);
            left.add(right.remove());
        } else {
            left.add(num);
            right.add(left.remove());
        }
        isEven = !isEven;
    }

    public double findMedian() {
        if (left.size() > right.size()) return left.peek();
        return ((left.peek() + right.peek()) / 2.0);
    }

}