- 题目描述:
-
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。
- 输出:
-
对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。
- 样例输入:
-
7 s 3 s 4 s 2 s 1 o o s 0
- 样例输出:
-
3 3 2 1 2 3 0
很简单,再用一个栈用来存储当前的最小值,当新元素比当前最小值小时,将其入min栈,出栈时,如果栈顶元素就是当前最小值,则将出从min栈弹出。
1 #include <iostream> 2 #include <stack> 3 #include <cstdio> 4 using namespace std; 5 6 int n, a; 7 char ci; 8 9 int main() { 10 //freopen("a.in", "r", stdin); 11 while (cin >> n) { 12 stack<int> s; 13 stack<int> min; 14 while (n--) { 15 cin >> ci; 16 if (ci == 's') { 17 cin >> a; 18 s.push(a); 19 if (min.empty() || a < min.top()) 20 min.push(a); 21 } else if (ci == 'o') { 22 if (s.top() == min.top()) 23 min.pop(); 24 s.pop(); 25 } 26 if (min.empty()) 27 cout << "NULL" << endl; 28 else 29 cout << min.top() << endl; 30 } 31 } 32 return 0; 33 } 34 /************************************************************** 35 Problem: 1522 36 User: hupo250 37 Language: C++ 38 Result: Accepted 39 Time:120 ms 40 Memory:1524 kb 41 ****************************************************************/