class Solution {

public:
//本题难点在对动态的栈进行求最小值的操作,可以先定义两个vector调用sort函数来解决
    stack<int> a;
    vector<int> b1,b2;//定义所需的栈和序列
    int m{};//记录最小值
    void push(int value) {
        a.push(value);
        b1.push_back(value);//压栈,push数据进入vector
    }
    void pop() {
        a.pop();
        b1.pop_back();//出栈,pop数据走出vector
    }
    int top() {
        return a.top();//返回栈顶数据
    }
    int min() {
        b2=b1;//先复制一份b1,这是为了保留b1的顺序
        sort(b1.begin(),b1.end());//将b1的数据进行升序
        m=b1[0];//最小值即为b[0]
        b1=b2;//将顺序复原
        return m;
    }
  //本题可能有更优的解法,原谅笔者水平较次,只会常规解法
};