#include <bits/stdc++.h>
using namespace std;


class  MyStack{
public:

        stack<int> ordinary_stack;
        stack<int> min_stack;
        MyStack()= default;
        void push(int);
        void pop();
        int getMin();

};

void MyStack::push(int val)
{

        ordinary_stack.push(val);
        if(min_stack.empty()){
                min_stack.push(val);
        }else {
                int min_val = min_stack.top();
                if (val <= min_val) {
                        min_stack.push(val);
                }
        }

}

void MyStack::pop()
{
        int val = ordinary_stack.top();
        ordinary_stack.pop();
        if(!min_stack.empty()&& val==min_stack.top()){
                min_stack.pop();
        }
}

int MyStack::getMin()
{
        int min=min_stack.top();
        return min;
}


int main()
{
        int n;
        cin>>n;
        string op;
        int val;
        MyStack s;
        while(cin>>op){
                if(op=="push"){
                        cin>> val;
                        s.push(val);
                }else if(op=="pop"){
                       s.pop();
                }else if(op=="getMin"){
                        cout<<s.getMin()<<endl;
                }
        }
        return 0;
}

注意获得最小值部分的涉及,可以另外设置一个栈,每次push的值val,可以和最小值栈的顶对比,如果≤,则将这个val也同时push到最小值栈。出栈的时候也别忘了要和最小值栈进行一个对比,防止最小值已被pop而最小值栈没有清除。