Standard Template Library
这一篇中我们学习栈这个结构,即stack。
1.头文件
#include
using namespace s;
2.定义
stack s;
3.关于map的一些基本操作和函数
- 压栈
s.push() - 弹栈
s.pop() - s.size()
- s.empty()
- s.top()
返回栈顶元素,但是不弹栈。
输入输出样例输入
8
1 23
1 234
1 2
3
2
2
2
3
样例输出
2 2
gg!
分析:就是在栈的基本功能的基础上加上了一个Get_min的操作。需要用到一个单调栈的思想,就是开辟两个栈一个用来放入栈的元素,另一个用来存放最小值,具体实现参考下图:
源码:
#include <stdio.h>
#include <stack>
using namespace std;
stack <int> s;
stack <int> Min;
void f(int op)
{
int tmp;
if(op == 1)
{
scanf("%d",&tmp);
if(Min.size()== 0 || tmp <= Min.top()) Min.push(tmp);
s.push(tmp);
}
if(op == 2)
{
if(s.size() == 0) printf("gg!\n");
else{
if(s.top() == Min.top()) Min.pop();
s.pop();
}
}
if(op == 3)
{
if(s.size() == 0) printf("gg!\n");
else{
printf("%d %d\n",Min.top(),s.top());
}
}
}
int main()
{
int n;
int op;
scanf("%d",&n);
while(n--)
{
scanf("%d",&op);
f(op);
}
return 0;
}