class Solution {
public:
    /**
      [[1,3],[1,2],[1,1],[3],[2],[3]]
     * 数组第一个代表操作,1==push,2==pop,2==getMin
     * 所以 1出现时,后面需要接push的数字
     * 把所有的操作实现完,输出结果就行
     */
    vector<int> getMinStack(vector<vector<int> >& op) {
        vector<int> ans;
        if(op.empty()) return ans;

        for(int i=0;i<op.size();i++){
            if(op[i][0]==1 && op[i].size()==2){
                push(op[i][1]);
            }
            else if(op[i][0]==2 && op[i].size()==1)
                pop();
            else if(op[i][0]==3 && op[i].size()==1)
                ans.push_back(getMin());

        }
        return ans;

    }
    void push(int data){
        if(minStack.empty() ||data<minStack.top())
            minStack.push(data);
        else 
            minStack.push(minStack.top());

        dataStack.push(data);
    }
    void pop(){
        dataStack.pop();
        minStack.pop();
    }
    int getMin(){
        return minStack.top();
    }
private:
    stack<int> dataStack;
    stack<int> minStack;
};