#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而最小值栈没有清除。