[Jobdu] 题目1522:包含min函数的栈

题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的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 ****************************************************************/

 

posted @ 2014-04-18 15:37  Eason Liu  阅读(204)  评论(0编辑  收藏  举报