题解:洛谷 P1165 日志分析
- 标签:栈,模拟
题意
对于一个栈,给定三种操作:
0 x,将 \(x\) 入栈;1,出栈,栈空时忽略;2,查询当前栈内最大值。
思路
前两个都是栈的基本操作,关键在于查最大值。
每次询问暴力找肯定不行。
如果用一个变量一直记录当前最大值,可以应对入栈,出栈就不行。
这个记录的东西必须 \(O(1)\) 复杂度查最大值,而且可以查历史最大值。
可以发现这就是一个栈。
用两个栈,一个记录数值,一个记最大值。
考虑如何维护第二个栈:
- 进栈:如果现在 \(x\) 大于栈顶,那 \(x\) 是最大值,进栈,否则不动;
- 出栈:如果现在的 \(x\) 和当前最大值相等,那出栈,最大值变为历史最大值,否则对答案无影响。
查询时输出第二个栈顶即可。
复杂度 \(O(n)\)。
代码
#include<bits/stdc++.h>
#define i64 long long
#define L(a,b,c) for(int i=a;i<=b;i+=c)
using namespace std;
const int N=2e5+5;
int n,op,x,p1,p2,st1[N],st2[N];
void push1(int x){st1[++p1]=x;}
void push2(int x){st2[++p2]=x;}
void pop1(){--p1;}
void pop2(){--p2;}
void solve();
signed main(){
ios::sync_with_stdio(0);
solve();
return 0;
}
void solve(){
cin>>n;
L(1,n,1){
cin>>op;
if(op==0){
cin>>x;
push1(x);
if(x>st2[p2]) push2(x);
}
else if(op==1){
if(p1>0){
if(st1[p1]==st2[p2]) pop2();
pop1();
}
}
else cout<<st2[p2]<<endl;
}
}
题解:洛谷 P1165 日志分析的更多相关文章
- 洛谷——P1165 日志分析
P1165 日志分析 题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次 ...
- 洛谷 P1165 日志分析
题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次入库的集装箱重量:第二 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
- 题解 洛谷P2158 【[SDOI2008]仪仗队】
本文搬自本人洛谷博客 题目 本文进行了一定的更新 优化了 Markdown 中 Latex 语句的运用,加强了可读性 补充了"我们仍不曾知晓得 消失的 性质5 ",加强了推导的严谨 ...
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...
- 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...
- 题解-洛谷P4229 某位歌姬的故事
题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...
- 题解-洛谷P4724 【模板】三维凸包
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...
- 题解-洛谷P4859 已经没有什么好害怕的了
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...
随机推荐
- java复制指定文件
package com.cn.file; import org.junit.Test; import java.io.FileInputStream; import java.io.FileNotFo ...
- 使用js有效括号匹配封装函数
点击查看代码 function isValidParentheses(str) { // 定义一个栈,用于存储待匹配的左括号 let stack = []; // 定义一个对象,用于快速判断括号是否成 ...
- Scala集合flatten操作
一层嵌套,但是flatten的要求需要List内部类型都一样, 例如都为List scala> List(List(1), List(2), List(3)).flatten res4: Lis ...
- AIRIOT物联网低代码平台如何配置Modbus TCP协议?
AIRIOT物联网低代码平台稳定性超高,支持上百种驱动,各种主流驱动已在大型项目中通过验证,持续稳定运行. AIRIOT物联网低代码平台如何配置Modbus TCP协议?操作如下: AIRIOT与西门 ...
- ControlNet
ControlNets 允许您选择图像来引导 AI,使其更紧密地跟随您的控制图像.您可以选择一个过滤器来预处理图像,以及已知(或自定义)控制网络模型之一. 虽然这听起来与图像到图像相似,但 Contr ...
- N 年前,为了学习分库分表,我把 Cobar 源码抄了一遍
10 几年前,互联网产业蓬勃发展,相比传统 IT 企业,互联网应用每天会产生海量的数据. 如何存储和分析这些数据成为了当时技术圈的痛点,彼时,分库分表解决方案应运而生. 当时最流行的 Java 技术论 ...
- Vue cli路由
上面是将Forecast组件作为了Home的子组件使用,现在我们将其作为一个路由组件使用. 在router/index.js路由系统注册路由: { path: '/forecast', name: ' ...
- WPF使用事件聚合器,实现任意页面跨页通信
前言:最近几天有好几个小伙伴玩WPF,遇到不同页面,不知道要怎么传递消息.于是,我今天就来演示一个事件聚合器的玩法,采用prism框架来实现.作为福利,内容附带了主页面打开对话框时候直接通过参数传递消 ...
- k8s中的pod更新策略
StatefulSet(有状态集,缩写为sts)常用于部署有状态的且需要有序启动的应用程序,比如在进行SpringCloud项目容器化时,Eureka的部署是比较适合用StatefulSet部署方式的 ...
- 查看CentOS版本的方法
1.以下命令对于Linux发行版是通用的: root@MyMail ~ # uname Linux root@MyMail ~ # uname -r 2.6.18-164.el5 [root@loca ...