网站优化页面,中山seo网络推广,网络服务器无响应可能原因,wordpress 默认主题站点题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计。目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志。该日志记录了两类操作#xff1a;第一类操作为集装箱入库操作#xff0c;以及该次入库的集装箱重量#xff1b;第二类操作为集装箱的出库操作。这些…题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计。目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志。该日志记录了两类操作第一类操作为集装箱入库操作以及该次入库的集装箱重量第二类操作为集装箱的出库操作。这些记录都严格按时间顺序排列。集装箱入库和出库的规则为先进后出即每次出库操作出库的集装箱为当前在仓库里所有集装箱中最晚入库的集装箱。 出于分析目的分析人员在日志中随机插入了若干第三类操作――查询操作。分析日志时每遇到一次查询操作都要报告出当前仓库中最大集装箱的重量。 输入输出格式 输入格式 包含N1 行 第一行为1 个正整数N对应于日志内所含操作的总数。 接下来的N 行分别属于以下三种格式之一 格式1: 0 X //一次集装箱入库操作正整数X表示该次入库的集装箱的重量 格式2: 1 //一次集装箱出库操作就当时而言最后入库的集装箱出库 格式3: 2 //一次查询操作要求分析程序输出当前仓库内最大集装箱的重量 当仓库为空时你应该忽略出库操作当仓库为空查询时你应该输出0。 输出格式 输出行数等于日志中查询操作的次数。每行为一个正整数表示查询结果。 输入输出样例 输入样例#113
0 1
0 2
2
0 4
0 2
2
1
2
1
1
2
1
2 输出样例#12
4
4
1
0 说明 对于20%的数据有N≤10 对于40%的数据有N≤1000 对于100%的数据有N≤200000X≤108。 代码 #includecstdio
#includecstdlib
#includecstring
#includeiostream
#includealgorithm
using namespace std;
int n,m,x,stack[200001],top,maxl;
int main()
{scanf(%d,n);for(int i1;in;i){maxl0;scanf(%d,m);if(m0){scanf(%d,x);stack[top]x;}if(m1)top--;if(m2){for(int j1;jtop;j)if(stack[j]maxl)maxlstack[j];printf(%d\n,maxl);}}return 0;
} 这个代码你会发现在提交时会tle. 为何 因为我们在每次进行查找时都需要for循环一般这样会浪费掉很多时间。 那我们该如何做呢 下面我们来看一下正解 #includecstdio
#includecstdlib
#includecstring
#includeiostream
#includealgorithm
using namespace std;
int n,m,x,stack[200001],top,maxl;
int max(int i,int j)
{if(ij) return i;else return j;}
int main()
{scanf(%d,n);for(int i1;in;i){maxl0;scanf(%d,m);if(m0){scanf(%d,x);top;stack[top]max(x,stack[top-1]);}if(m1)top--;if(m2){printf(%d\n,stack[top]);}}return 0;
} 是不是感觉这个代码会wa你看这把最大的放后面肯定不对 no 这个代码是对的 你看我们每次输入1的时候是把最后一个数进行删除处理而且他让输出序列中最的数那小的数是否就没有什么用了所以我们只需要把最大的数放在最后面就可以啦转载于:https://www.cnblogs.com/z360/p/6556769.html