设栈S和队列Q的初始状态为空,元素1~n 依次进入S,一个元素出栈后即进入Q,若规定了这n个元素的出队序列,请模拟输出 入栈 和 出栈 过程,并输出实现这个出队序列的栈S的最小容量。
输入数据保证都是合法的,即所有的出队序列都是可以实现的。
输入格式:
第一行是正整数n,表示1~n这n个元素按顺序入栈。
第二行有n个数,表示我们规定的出队序列。
输出格式:
模拟出栈入栈的流程,不断输出 push ** 或者 pop **, 全部完成后输出栈S的最小容量。
输入样例:
6
2 4 3 6 5 1
输出样例:
push 1
push 2
pop 2
push 3
push 4
pop 4
pop 3
push 5
push 6
pop 6
pop 5
pop 1
3
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
栈限制 8192 KB
简化问题:不需要构造栈来模拟入栈出栈,只需根据出栈元素大小分析每次出入栈的元素的值
#include<iostream>
using namespace std;
int main(){
int n,e;
int m=0; //m用于记录实际容量
int max=0; //max 记录最大容量
int a=1; //a是待入栈的元素(1~n)
cin>>n;
for(int i=0;i<n;i++){
cin>>e;
while(a<=e){
cout<<"push "<<a<<endl;
a++;
m++;
if(max<=m) max=m;
}
cout<<"pop "<<e<<endl;
m--;
}
cout<<max;
return 0;
}