[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 ****************************************************************/

 

你可能感兴趣的:(job)