题解 P1165 【日志分析】
引领天下
2017-06-14 17:17:47
个人上来直接写了个朴素的栈模拟,然后很开心的 T 了。
后来思考了一下,得到了优化后的思路。
做法:
指令边读边做,然后分几种情况:
1. 操作 0(集装箱进库操作,相当于进栈),如果输入的数小于之前的最大值,就仍然存储原来的最大值因为后进先出,当前的如果小,永远不可能被 2 询问到,所以存了也没用,不然入栈,栈顶 +1
2. 操作 1(集装箱出库操作,相当于出栈),直接栈顶 -1
3. 操作 2(集装箱询问操作,由于此时的栈顶是最大值,可以直接输出)
事实上,以上做法本质上就是维护了一个单调栈。
代码就不贴了,相信大家应该可以实现。