CF1407D 题解

news/2025/12/9 22:18:14/文章来源:https://www.cnblogs.com/Creativexxx/p/19328558

CF1407D - Description

\(n\) 栋楼,每栋楼有高度 \(h_i\),对于第 \(i\) 栋楼和第 \(j\) 栋楼,如果 \((i,j)\) 满足以下三个条件中的任意一个,我们认为可以从第 \(i\) 栋楼跳到第 \(j\) 栋楼:

  • \(i+1=j\)
  • \(\max(h_{i+1},h_{i+2},\cdots ,h_{j-1})<\min(h_i,h_j)\)
  • \(\min(h_{i+1},h_{i+2},\cdots ,h_{j-1})>\max (h_i,h_j)\)

问你从第 \(1\) 栋楼开始,最少跳几次能跳到第 \(n\) 栋楼?

\(2\le n\le 3\times 10^5\)

CF1407D - Solution

我们设计一个 \(f_i\) 表示从 \(1\) 走到 \(i\) 的最少步数。

对于限制 \(1\),容易得到 \(f_i=f_{i-1}+1\)

限制 \(2\) 就是说对于所有 \(i<k<j\)\(i\) 都是 \(k\) 左侧第一栋比 \(h_k\) 高的楼,\(j\) 都是 \(k\) 右侧第一栋比 \(h_k\) 高的楼。这种左边/右边第一个大于/小于的题很容易想到单调栈求出 \(lft\)\(rgt\)

我们从 \(i\) 往前找,遍历每一个 \(h_j<h_i\) 的点,如果 \(j\) 满足 \(\max\{ h_{j+1},\cdots ,h_{i-1} \}<h_j\),就可以从 \(j\) 跳到 \(i\)。我们发现这个条件就等于在讲对于 \(i\) 更新单调栈时会弹出 \(j\),于是维护单调栈的时候顺手计算就行。一个细节是如果 \(h_j=h_i\),是无法从 \(j\) 跳到 \(i\) 的,注意特判。

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n,h[300005];
stack<int>q,qq;
long long dp[300005];
signed main(){cin>>n;for(int i=1;i<=n;i++){cin>>h[i];dp[i]=INT_MAX;}dp[1]=0;q.push(1);qq.push(1);for(int i=2;i<=n;i++){int lst=INT_MAX;while(!q.empty()&&h[q.top()]>=h[i]){dp[i]=min(dp[i],dp[q.top()]+1);lst=h[q.top()];q.pop();}if(!q.empty()&&lst!=h[i]){dp[i]=min(dp[i],dp[q.top()]+1);}q.push(i);lst=INT_MAX;while(!qq.empty()&&h[qq.top()]<=h[i]){dp[i]=min(dp[i],dp[qq.top()]+1);lst=h[qq.top()];qq.pop();}if(!qq.empty()&&lst!=h[i]){dp[i]=min(dp[i],dp[qq.top()]+1);}qq.push(i);}cout<<dp[n]<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/995635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12月9号

今天进行了中国古诗词的学习。

C语言深度解剖:第一章关键字(五) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MySQL 筛选条件放 ON 后 vs 放 WHERE 后

ON 决定如何 "连接" 表,WHERE 决定连接后 "显示" 哪些行。 这个根本区别导致了在 LEFT JOIN / RIGHT JOIN 外连接中,条件放置位置会产生巨大影响;而在 INNER JOIN 中,效果通常 等价。今天我们…

明天不干是小狗

明天不干是小狗上一条必须干 我说真的 老己,你干吧,我求求你了

CF547B 题解

CF547B 题解CF547B - Description 给你个长度为 \(n\) 的序列 \(a\),对于每个 \(1\le k\le n\),有 \(n-k+1\) 个中所有长度为 \(k\) 的子串,你需要求出这 \(n-k+1\) 个子串的区间最小值的最大值,即下面式子的值: …

SAT 辅导哪里好?2025 年优质机构推荐(含精准选择指南) - 品牌测评鉴赏家

SAT 辅导哪里好?2025 年优质机构推荐(含精准选择指南)选择 SAT 辅导机构需结合自身基础、目标分数、学习习惯及地域便利性。以下是 2025 年最新优质机构推荐,涵盖线上线下资源,针对不同需求提供精准建议: 一、全…

10403_基于Springboot的旅游管理系统

1、项目包含 项目源码、项目文档、数据库脚本、软件工具等资料; 带你从零开始部署运行本套系统。 2、项目介绍 随着旅游业的发展,越来越多的人选择通过互联网来规划自己的旅行。在线旅游信息推荐系统就是为了帮助用户…

MMH_蓝桥杯Python_语法基础_列表与循环语句基础

1.列表 列表可以极大降低我们在处理多个元素时的复杂程度; 在 Python 中,列表(list) 是一种有序、可变、可存储多种数据类型的序列数据结构,使用中括号 [] 定义,元素之间用逗号分隔。 1.创建列表 代码展示 #包…

2025全屋定制十大品牌哪家好?欧蒂尼硬核实力破局,领衔品质家居新革命 - 资讯焦点

2025年,中国全屋定制行业迎来“质造升级+需求多元”的双重变革,整家定制、智能集成、年轻化设计成为行业主流趋势。在这片竞争激烈的赛道上,一批兼具实力与口碑的品牌脱颖而出,它们以技术为基、以设计为魂、以服务…

keepalived搭建高可用

一、HA集群 1.1 ha集群是什么 高可用集群,是有多台服务器节点组成的集群,通过冗余设计和故障自动切换,保证了核心服务,持续可用,减少了停机时间就是当一个提供网站的服务故障后,另外一台机器充当这个提供网站的角…

P5304 [GXOI/GZOI2019] 旅行者 题解

P5304 [GXOI/GZOI2019] 旅行者 题解P5304 [GXOI/GZOI2019] 旅行者 Description 给你一个 \(n\) 个点,\(m\) 条边的有向连通图,给出 \(k\) 个点的编号,让你求出这些点中距离最近的两点之间距离。 \(n\le 10^5,m\le 5…

2025 年面膜消费指南:告别盲目囤货,10款补水保湿抗老修护爆款适配干油敏肌,精准解决护肤痛点 - 资讯焦点

一抹精华浸润肌底,熬夜的蜡黄倦容悄然褪去;一贴膜布贴合脸颊,换季的泛红干痒即刻舒缓;分区护理精准发力,T 区的油光与 U 区的干纹同时消失 —— 这是 2025 年新一代功效型面膜带来的护肤新体验。 据华泰研究所 20…

P3275 [SCOI2011] 糖果 题解

P3275 [SCOI2011] 糖果 题解P3275 [SCOI2011] 糖果 Description 给你 \(k\) 个指令(约束条件),让你构造一个长度为 \(n\) 的正整数序列 A,满足这个条件的同时让所有元素的和最小。 指令的格式如下:1 a b 表示 \(A…

the attitude

some Chinese talked with people comes from R. they will discuss that one with their friends, is the people just monkey to be discussed? I will never do that.

2025年国内正规的微动开关工厂怎么选购,家电微动开关/大电流微动开关/新能源微动开关/小型微动开关/汽车微动开关供货商怎么选 - 品牌推荐师

随着工业自动化、智能家电及新能源汽车等领域的蓬勃发展,作为关键控制元件的微动开关,其市场需求持续攀升。面对市场上众多的微动开关制造商,采购方如何甄别与选择一家技术可靠、品质稳定、供货能力强的正规工厂,成…

win10 vscode 使用ssh登录 ubuntu

win10 vscode 使用ssh登录 ubuntuvscode ssh在Ubuntu上建立SSH服务器,然后从Windows 10上的VSCode连接。 git操作 cd到项目目录 如果要在局域网中搭建git仓库,先要将下载的项目中有git工程配置文件删除掉 rm -rf .gi…

P4064 [JXOI2017] 加法 题解

P4064 [JXOI2017] 加法 题解P4064 [JXOI2017] 加法 Description 给你一个长度为 \(n\) 的正整数序列 \(A\),再给你 \(m\) 个区间,让你在这 \(m\) 个区间中选出 \(k\) 个进行区间加 \(a\) 操作(\(a\) 为常数),使得…

2025年河南工业大学2025新生周赛 (7)

A 回声 将连续的字母和连字符视为同一个单词bool isWordChar(char c) {if ((c >= a && c <= z) ||(c >= A && c <= Z) ||c == -) {return true;}return false; }从头到尾遍历,并存单词即…

P3076 [USACO13FEB] Taxi G 题解

P3076 [USACO13FEB] Taxi GP3076 [USACO13FEB] Taxi G Description 有一条长度为 \(m\) 的数轴,有 \(n\) 头牛需要坐车前往别的地方,起点和终点分别为 \(a_i\) 和 \(b_i\)。 现在一辆出租车从原点出发,要运送完所有…

第四章 串

串的定义和实现 串的基本概念 串的定义 串,即字符串,是由零个或多个字符组成的有限序列,一般记为 \[S=a_{1}a_{2}a_{3}...a_{n}(n\ge0) \]其中,S是串名,单引号括起来的字符序列是串的值,\(a_{i}\)可以是字母、数…