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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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;
}