【模板】栈
题目描述
请你实现一个栈(stack),支持如下操作:
push(x)
:向栈中加入一个数 x x x。pop()
:将栈顶弹出。如果此时栈为空则不进行弹出操作,输出Empty
。query()
:输出栈顶元素,如果此时栈为空则输出Anguei!
。size()
:输出此时栈内元素个数。
输入格式
本题单测试点内有多组数据。
输入第一行是一个整数
T
T
T,表示数据组数。对于每组数据,格式如下:
每组数据第一行是一个整数,表示操作的次数
n
n
n。
接下来
n
n
n 行,每行首先由一个字符串,为 push
,pop
,query
和 size
之一。若为 push
,则其后有一个整数
x
x
x,表示要被加入的数,
x
x
x 和字符串之间用空格隔开;若不是 push
,则本行没有其它内容。
输出格式
对于每组数据,按照「题目描述」中的要求依次输出。每次输出占一行。
样例 #1
样例输入 #1
2
5
push 2
query
size
pop
query
3
pop
query
size
样例输出 #1
2
1
Anguei!
Empty
Anguei!
0
提示
样例 1 解释
对于第二组数据,始终为空,所以 pop
和 query
均需要输出对应字符串。栈的 size 为 0。
数据规模与约定
对于全部的测试点,保证 1 ≤ T , n ≤ 1 0 6 1 \leq T, n\leq 10^6 1≤T,n≤106,且单个测试点内的 n n n 之和不超过 1 0 6 10^6 106,即 ∑ n ≤ 1 0 6 \sum n \leq 10^6 ∑n≤106。保证 0 ≤ x < 2 64 0 \leq x \lt 2^{64} 0≤x<264。
提示
- 请注意大量数据读入对程序效率造成的影响。
- 因为一开始数据造错了,请注意输出的
Empty
不含叹号,Anguei!
含有叹号。
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define int unsigned long long
const int N=1000100;
int stk[N],tt;
void slove(){
int n;cin>>n;
tt=0;
while(n--){
string s;cin>>s;
if(s=="push"){
int x;cin>>x;
stk[++tt]=x;
}else if(s=="pop"){
if(tt!=0)tt--;
else cout<<"Empty\n";
}else if(s=="query"){
if(tt!=0)cout<<stk[tt]<<"\n";
else cout<<"Anguei!\n";
}else{
cout<<tt<<"\n";
}
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--)slove();
return 0;
}
得用unsigned long long