题目
老师每次在洛谷团队里布置了作业之后,都十分关心同学们的完成进展。
当然,竞赛班里不断有新同学加入,每当有新同学加入,老师就会把他也拉入团队。新加入的同学常常有很牛的人,一加入团队就会在很短的时间内把自己的作业分数刷到新高。
老师为了分析同学们的学习情况,常会进行三种操作:
操作代码一:0 X //一次加入团队作业操作,正整数X表示该新加入同学的作业得分
操作代码二:1 //一次退出团队作业操作,(就当时而言)最后加入团队的同学退出作业
操作代码三:2 //一次查询操作,老师想要知道当前团队里完成作业分数的最高值
当团队作业人数为 0 时,如果老师此时查询,你的程序应该输出 0。
输入数据有 n+1 行,第一行一个正整数 n,表示老师操作的次数。
接下来 n 行,分别属于以下三种格式之一:
操作代码一:0 X (注意中间有一个空格)
操作代码二:1
操作代码三:2
意义见题面描述。
输出若干行,你的程序需要对每一次的查询操作(格式3)返回一个查询结果,即查询时的团队作业最高分。
注意,每个查询结果应该独立在一行。
13
0 1
0 2
2
0 4
0 2
2
1
2
1
1
2
1
2
2
4
4
1
0
n≤200,000
我的代码
#include "bits/stdc++.h"
using namespace std;
stack<int> s;
int n, num, a, x;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a;
if (a == 0) {
cin >> x;
if (x > num) {
num = x;
}
s.push(x);
} else if (a == 1) {
s.pop();
} else if(a==2){
if (s.size() != 0) {
cout << num << endl;
} else {
cout << "0" << endl;
}
}
}
return 0;
}
嘤嘤嘤,只能拿十六分。。。