在每次放进去的时候直接和前一个进行比较,然后拿最小值作为放进去的即可。比如放进去的是5 4 6 3,那么从杯底到杯口的数值应该是5 4 4 3,以后每一次删除就只要删除一个即可。

#include <iostream>
using namespace std;

int a[3000000];
int flag_ = -1;

int main (){
    int n, value;
    cin >> n;
    char ch;
    while (n--){
        cin >> ch;
        if ('+' == ch){
            cin >> value;
            flag_++;
            if (0 == flag_){
                a[flag_] = value;
            }else{
                a[flag_] = min(a[flag_-1], value);
            }
            cout << a[flag_] << endl;
        }else{
            if (flag_ >= 0){
                flag_--;
            }
            if (flag_ >= 0){
                cout << a[flag_] << endl;
            }else{
                cout << "-1" << endl;
            }
        }
    }
    return 0;
}