Use pilas duales para implementar una sola pila que contenga funciones mínimas, donde se usa una estación para mantener el elemento de clasificación más pequeño en la pila actual.
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
while(!mystack.empty()) mystack.pop();
while(!minStack.empty()) minStack.pop();
}
void push(int x) {
mystack.push(x);
if(minStack.empty() || x <= minStack.top()) minStack.push(x);
}
void pop() {
if(mystack.top() == minStack.top()) minStack.pop();
mystack.pop();
}
int top() {
return mystack.top();
}
int min() {
return minStack.top();
}
private:
stack<int> mystack;
stack<int> minStack;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->min();
*/