/* 用两个栈,一个保存原始数据st,一个保存的是st中的一个有序的子序列 */ class MinStack { public: stack<int>min,st; void push(int x) { if(min.empty()){ st.push(x); min.push(x); return; } st.push(x); if(x<=min.top()) min.push(x); } void pop() { if(!st.empty()){ if(st.top() == min.top()){ min.pop(); } st.pop(); } } int top() { if(!st.empty()) return st.top(); } int getMin() { if(!min.empty()) return min.top(); } };