class MaxStack {
Deque<Integer> dqStack;
PriorityQueue<Integer> pqMax;
/** initialize your data structure here. */
public MaxStack() {
dqStack = new ArrayDeque<>();
pqMax = new PriorityQueue<>( (a,b) ->(b - a) );
}
public void push(int x) {
dqStack.addLast(x);
pqMax.offer(x);
}
public int pop() {
int deleteE = dqStack.removeLast();
pqMax.remove(deleteE);
return deleteE;
}
public int top() {
return dqStack.getLast();
}
public int peekMax() {
return pqMax.peek();
}
public int popMax() {
int deleteE = pqMax.poll();
dqStack.removeLastOccurrence(deleteE);
return deleteE;
}
}