Description

M海运公司最近要对旗下仓库的货物进出情况进行统计。目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志。该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次入库的集装箱重量;第二类操作为集装箱的出库操作。这些记录都严格按时间顺序排列。集装箱入库和出库的规则为先进后出,即每次出库操作出库的集装箱为当前在仓库里所有集装箱中最晚入库的集装箱。
出于分析目的,分析人员在日志中随机插入了若干第三类操作——查询操作。分析日志时,每遇到一次查询操作,都要报告出当前仓库中最大集装箱的重量。

Input

包含N+1 行:
第一行为1 个正整数N,对应于日志内所含操作的总数。
接下来的N 行,分别属于以下三种格式之一:
格式1: 0 X //一次集装箱入库操作,正整数X表示该次入库的集装箱的重量 格式2: 1 //一次集装箱出库操作,(就当时而言)最后入库的集装箱出库
格式3: 2 //一次查询操作,要求分析程序输出当前仓库内最大集装箱的重量 当仓库为空时你应该忽略出库操作,当仓库为空查询时你应该输出0。

Output

输出行数等于日志中查询操作的次数。每行为一个正整数,表示查询结果。

Sample Input

13
0 1
0 2
2
0 4
0 2
2
1
2
1
1
2
1
2

Sample Output

2
4
4
1
0

Hint

【数据规模】
对于20%的数据,有N≤10;
对于40%的数据,有N≤1000;
对于100%的数据,有N≤200000,X≤10^8。

Thinking

就从简单题开始吧。首先这是一道非常裸的栈的题目,入栈出栈操作都有,关键是处理询问。

因为需要维护最大值,很容易想到用优先队列或是堆这样的方法,但是他们的共同问题就是删除操作不好处理。考虑到栈里的元素,先进栈的一定后出,所以在入栈时最大值具有单调性。所以理论上是有O(n)复杂度的算法的,用堆大材小用了。

于是我们改变思路,用栈保存到当前元素为止的最大值。对于每次入栈的元素x,判断x与当前栈顶的大小关系。如果x较大则x入栈,否则栈顶元素复制一份入栈。

算法感谢@阿当

如图所示,因为当前元素下有比它大的元素,所以这个元素的值事实上不会被用到,因此直接设置为栈顶元素即可。(如这里直接入栈7即可)

Code

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5
 6 int n,top,x,op;
 7 int stack[200050];
 8
 9 int main()
10 {
11     memset(stack,0,sizeof(stack));
12     scanf("%d",&n);
13     top=0;
14     for(int i=1;i<=n;i++)
15     {
16         scanf("%d",&op);
17         switch(op)
18         {
19             case 0:    scanf("%d",&x);
20                     stack[++top]=max(x,stack[top-1]);
21                     break;
22             case 1: top--; break;
23             case 2: printf("%d\n",stack[top]); break;
24         }
25     }
26     return 0;
27 }

转载于:https://www.cnblogs.com/Hist/p/4740718.html

【栈】日志分析(BSOJ2981)相关推荐

  1. 9开启线程日志_GC 日志分析

    GC 日志分析 首先,如果需要查看 GC 日志,需要在 jvm 参数中加入如下参数 -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:d:/GClo ...

  2. Kubernetes日志分析利器:Elassandra部署使用指南

    Elassandra是一个基于Apache Cassandra的Elasticsearch实现,有效结合了两者的优势,弥补了Elasticsearch的一些使用限制(单点故障.在线升级等).结合Flu ...

  3. 大数据主题分享第三期 | 基于ELK的亿级实时日志分析平台实践

    猫友会希望建立更多高质量垂直细分社群,本次是"大数据学习交流付费群"的第三期分享. "大数据学习交流付费群"由猫友会联合,斗鱼数据平台总监吴瑞诚,卷皮BI技术总 ...

  4. GC之七--gc日志分析工具

    性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...

  5. P1165 日志分析

    P1165 日志分析 题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次 ...

  6. 携程ELK日志分析平台深耕之路

    源起 日志,看似简单简单的文本,在网站运维人员眼里却似一座蕴含丰富的宝藏.通常以下运维任务都或多或少需要运维人员和日志打交道: 系统健康状况监控 查找故障根源 系统瓶颈诊断和调优 追踪安全相关问题 技 ...

  7. 千亿级数量下日志分析系统的技术架构选型

     
 随着数据已经逐步成为一个公司宝贵的财富,大数据团队在公司往往会承担更加重要的角色.大数据团队往往要承担数据平台维护.数据产品开发.从数据产品中挖掘业务价值等重要的职责.所以对于很多大数据工程师 ...

  8. ios崩溃日志收集_iOS崩溃与日志分析

    在iOS开发中经常需要靠记录日志来调试应用程序.解决崩溃问题等,整理常用的日志输出和崩溃日志分析. 最新更新:2018-11-30 基于CocoaLumberjack 的 Swift使用封装库 一.崩 ...

  9. iOS崩溃日志分析-b

    1名词解释 1.1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID,目的是为了唯一识别这个文件. 1.2. dwarfdump 苹果提供的命令行工具,其中一些功能就是查 ...

  10. # iOS进阶 # 崩溃与日志分析

    看什么看!点我呀! 全栈程序员,免费入门到精通! 作者丨就叫yang https://www.jianshu.com/p/5b132f0e31a3 在iOS开发中经常需要靠记录日志来调试应用程序.解决 ...

最新文章

  1. torch 多进程卡死
  2. 069_html统一资源定位器
  3. 高基数特征的预处理方式
  4. 学Java好不好?从业方向都有哪些?
  5. Boost:内存限制的测试程序
  6. 如何上传本地图片到PictureBox控件
  7. 神级代码编辑软件(Sublime Text 3) v3.3114 汉化特别版
  8. maven(2)——修改maven的setting.xml文件,更改下载地址和镜像
  9. 黑鲨重装计算机安装无法继续,黑鲨装机大师怎么重装系统 一键装机方法
  10. 裸眼3d项目,数字平原是这样制作的
  11. 无刷新假象   实现简易文件上传
  12. BZOJ P1189[HNOI2007]紧急疏散evacuate
  13. 搭建K8S 的dashboard的坑the server could not find the requested resource
  14. 搭建机器人电控系统——PID算法——位置式、增量式、模糊式PID
  15. java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板
  16. html中黑色小方块如何添加,word里有这种小黑色方块是什么符号如何替换
  17. Vue路由传参(params 与 query)
  18. 陈省身:三角形内角和不等于180°
  19. HC32F460开发之看门狗功能
  20. 虚拟同步机离网模型,30KW PCS储能逆变器 离网 并网功能

热门文章

  1. 【django】【基础】templates
  2. LAMP一体环境快速安装
  3. 区块链的爆炸式增长使其成为第二大热门需求技能
  4. 标准差、方差、协方差的简单说明
  5. springboot jpa 复合主键 联合主键
  6. 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 三 NSArray
  7. 简单例子解释invalidate(), requestLayout() (常用还是需要知道的)
  8. windows环境下跑hadoop自带的wordcount遇到的问题
  9. linux下安装cmake
  10. Windows Azure ISV博客系列:ReedRex 的sociobridge