当前位置: 首页 > news >正文

洛谷 P2947:[USACO09MAR] Look Up S ← 数组模拟+单调栈

【题目来源】
https://www.luogu.com.cn/problem/P2947

【题目描述】
约翰的 N(1≤N≤10^5) 头奶牛站成一排,奶牛 i 的身高是 Hi (1≤Hi≤10^6)。现在,每只奶牛都在向右看齐。对于奶牛 i,如果奶牛 j 满足 i<j 且 Hi<Hj,我们可以说奶牛 i 可以仰望奶牛 j。求出每只奶牛离她最近的仰望对象。

【输入格式】
第 1 行输入 N,之后每行输入一个身高 Hi。

【输出格式】
共 N 行,按顺序每行输出一只奶牛的最近仰望对象,如果没有仰望对象,输出 0。

【输入样例】






2

【输出样例】





0

【说明/提示】
6 头奶牛的身高分别为 3,2,6,1,1,2。
奶牛 #1,#2 仰望奶牛 #3,奶牛 #4,#5 仰望奶牛 #6,奶牛 #3 和 #6 没有仰望对象。

【数据规模】
对于 20% 的数据:1≤N≤10;
对于 50% 的数据:1≤N≤10^3;
对于 100% 的数据:1≤N≤10^5,1≤Hi≤10^6。

【算法分析】
单调栈不是一种新的栈结构,它只是栈的一种使用方式。也就是说,单调栈实际上就是普通的栈,只是在使用时始终保持栈内的元素是单调的。单调栈通过维护栈内元素单调性来高效解决特定范围查询问题,尤其擅长处理“下一个更大/更小元素”类问题。


【算法代码一:数组模拟(正序)

#include <bits/stdc++.h>
using namespace std;const int maxn=1e6+5;
int h[maxn], c[maxn];
int stk[maxn];
int n,top;int main() {cin>>n;for(int i=1; i<=n; i++) cin>>h[i];for(int i=1; i<=n; i++) {while(top && h[stk[top]]<h[i]) {c[stk[top]]=i;top--;}stk[++top]=i;}while(top) {c[stk[top]]=0;top--;}for(int i=1; i<=n; i++) cout<<c[i]<<endl;return 0;
}/*
in:
6
3
2
6
1
1
2out:
3
3
0
6
6
0
*/

【算法代码二:数组模拟(逆序)

#include <bits/stdc++.h>
using namespace std;const int maxn=1e6+5;
int h[maxn],c[maxn];
int stk[maxn];
int n,top;int main() {cin>>n;for(int i=1; i<=n; i++) cin>>h[i];for(int i=n; i>=1; i--) {while(top && h[stk[top]]<=h[i]) top--;if(top) c[i]=stk[top];stk[++top]=i;}for(int i=1; i<=n; i++) cout<<c[i]<<endl;return 0;
}/*
in:
6
3
2
6
1
1
2out:
3
3
0
6
6
0
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/149454046
https://blog.csdn.net/hnjzsyjyj/article/details/117136341
https://blog.csdn.net/hnjzsyjyj/article/details/117370314
https://www.acwing.com/file_system/file/content/whole/index/content/5683794/


 

http://www.lryc.cn/news/593209.html

相关文章:

  • 使用 Gunicorn 部署 Django 项目
  • 5 基于STM32单片机的绝缘检测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • 6 STM32单片机的智能家居安防系统设计(STM32代码+手机APP设计+PCB设计+Proteus仿真)
  • 对话访谈 | 盘古信息×锐明科技:中国企业高质量出海“走进去”和“走上去”
  • 家庭KTV v1.1.9 | 曲库丰富,无限制免费K歌
  • 驾驭 Spring Boot 事件机制:8 个内置事件 + 自定义扩展实战
  • 《一行注解解决重复提交:Spring Boot 接口幂等实战》
  • 深入理解设计模式:策略模式的艺术与实践
  • 在非Spring Boot的Spring项目中使用Lock4j
  • 用graphviz画一个关系图
  • 云服务器磁盘IO性能优化的测试与配置方法
  • 2025年7月19日,二维矩阵
  • 智能制造——解读39页汽车行业数字化工厂解决方案【附全文阅读】
  • 异世界历险之数据结构世界(二叉树-leetcode)
  • 国产电科金仓数据库:融合进化,智领未来
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
  • 架构探索笔记【1】
  • JavaScript空值安全深度指南
  • windows内核研究(驱动开发之内核编程)
  • Java无服务架构新范式:Spring Native与AWS Lambda冷启动深度优化
  • 【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)
  • C++STL系列之概述
  • OpenCV 官翻5 - 机器学习
  • 【web安全】万能密码
  • 物联网系统中的可视化大屏定义
  • UGUI 性能优化系列:第三篇——渲染与像素填充率优化
  • 小明记账簿焕新记:从单色到多彩的主题进化之路
  • 【Android】ListView与RecyclerView的基础使用
  • 安全隔离新选择:SiLM5768L系列 - 集成互锁功能的高速六通道数字隔离器
  • 从随机数值到特征检测器的学习与更新