题意是说当输入为正数时~压入栈..当输入为0时将所有元素复制一遍进去..当输入为-1时.输出栈顶并弹出...
练习赛的时候看范围就不敢做了...其实..注意当栈内的元素比较多了..就不需要复制了...卡住条件..直接模拟就行...
Program:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#define ll long long
#define oo 1000000007
#define MAXN 1000005
using namespace std;
int n,mystack[MAXN<<1];
int main()
{
int t,i,top;
while (~scanf("%d",&n))
{
top=0;
for (t=n;t>=1;t--)
{
int x;
scanf("%d",&x);
if (x>0) mystack[++top]=x;
if (x==-1) printf("%d\n",mystack[top--]);
if (!x)
{
if (top>t) continue; //没必要复制了
for (i=1;i<=top;i++) mystack[top+i]=mystack[i];
top*=2;
}
}
}
return 0;
}