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

信奥赛C++提高组csp-s之单调栈(案例实践2)

信奥赛C++提高组csp-s之单调栈(案例实践2)

【模板】单调栈

题目描述

给出项数为n nn的整数数列a 1 … n a_{1 \dots n}a1n

定义函数f ( i ) f(i)f(i)代表数列中第i ii个元素之后第一个大于a i a_iai的元素的下标,即f ( i ) = min ⁡ i < j ≤ n , a j > a i { j } f(i)=\min_{i<j\leq n, a_j > a_i} \{j\}f(i)=mini<jn,aj>ai{j}。若不存在,则f ( i ) = 0 f(i)=0f(i)=0

试求出f ( 1 … n ) f(1\dots n)f(1n)

输入格式

第一行一个正整数n nn

第二行n nn个正整数a 1 … n a_{1\dots n}a1n

输出格式

一行n nn个整数表示f ( 1 ) , f ( 2 ) , … , f ( n ) f(1), f(2), \dots, f(n)f(1),f(2),,f(n)的值。

输入输出样例 1
输入 1
5 1 4 2 3 5
输出 1
2 5 4 5 0
说明/提示

【数据规模与约定】

对于30 % 30\%30%的数据,n ≤ 100 n\leq 100n100

对于60 % 60\%60%的数据,n ≤ 5 × 10 3 n\leq 5 \times 10^3n5×103

对于100 % 100\%100%的数据,1 ≤ n ≤ 3 × 10 6 1 \le n\leq 3\times 10^61n3×1061 ≤ a i ≤ 10 9 1\leq a_i\leq 10^91ai109

解题思路

  1. 维护单调递减栈(栈顶最小)
  2. 逆序遍历数组(从右向左)
  3. 如果当前元素 >= 栈顶元素时,持续弹出栈顶
  4. 记录第一个大于当前元素的栈顶元素
  5. 当前元素入栈

代码实现

#include<iostream>usingnamespacestd;constintMAXN=3e6+5;inta[MAXN],res[MAXN],stk[MAXN],top=0;intmain(){intn;cin>>n;for(inti=1;i<=n;++i)cin>>a[i];for(inti=n;i>=1;--i){while(top&&a[stk[top]]<=a[i])top--;// 弹出不符合条件的元素res[i]=top?stk[top]:0;// 记录结果stk[++top]=i;// 当前索引入栈}for(inti=1;i<=n;++i)cout<<res[i]<<" ";return0;}

执行过程图解(样例数据)

当前ia[i]栈状态(底→顶)操作res[i]
55入栈0
43[5]3<55
32[5,4]2<34
24[5,4,3]弹出3,4→4>25
11[5,2]1<42

更多系列知识,请查看专栏:《信奥赛C++提高组csp-s知识详解及案例实践》:
https://blog.csdn.net/weixin_66461496/category_13113932.html

配套视频课信奥赛C++提高组csp-s知识详解
https://edu.csdn.net/course/detail/41081


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新)https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.rkmt.cn/news/1509314.html

相关文章:

  • NLP辅助系统性文献综述数据提取:精准、可审计、可复现
  • 2026年AI大模型API聚合平台选型指南:稳定性、兼容性与成本深度对比
  • 2026 佛山卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 中兴光猫工厂模式完全解锁指南:zteOnu工具终极使用教程
  • PyTorch反向传播实战:手动推导梯度流与NaN调试指南
  • 温州卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • reductstore 高性能面向机器人以及IOT场景的存储以及流数据基石
  • 数据库连接报错问题
  • 2026免费证件照制作工具合集,手把手教你自制标准证件照 - 办公小帮手
  • 心衰越治越重、频繁复发?精准诊疗给患者新生希望
  • 景区数字化AR公司有哪些在做深度落地?从试点项目到规模化运营的能力差异对比 - 品牌排行榜
  • Day11|精神焦虑人群专属:AI情绪树洞,如何悄悄抚平日常无名烦躁与焦虑?
  • 国产贴片机和进口机的差距,根源在哪?
  • AIStarter 即将重大升级!PanelAI 9月正式版上线,一键部署本地AI应用闭环生态详解
  • 别被200年数据保存忽悠了!聊聊EEPROM寿命测试里的‘高温催熟’与‘擦写计数’那些坑
  • 进口滚珠丝杠代理哪家值得合作?一级授权、现货库存与技术服务能力是关键门槛 - 品牌排行榜
  • 2026 东莞卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 【Springboot毕设全套源码+文档】springboot人脸识别系统研究及其在社区门禁系统中的应用(丰富项目+远程调试+讲解+定制)
  • 大数据平台项目投标技术方案参考文档(Word300页)
  • Strands Agents A2A 协议实战:让多个 AI Agent 互相对话
  • 从Console.WriteLine到你的代码:深入理解C# params关键字的‘前世今生’与设计哲学
  • FLV 如何转换成MP3,一招搞定
  • 1039市场采购和买单出口有什么区别?哪个更合规?| 性质与合规全面对比 - 欢欢在创业
  • Claude Code 主创放弃写 Prompt 了:他改写循环。Prompt Engineer 这个岗位还活得下去吗?
  • 别让栅极电阻毁了你的MOS管!手把手教你选对Rg值(附计算实例)
  • 【毕业设计】基于 SpringBoot 与 Android 的个人健康管理系统设计与实现基于springboot+Android的健康管理应用的设计与实现(源码+文档+远程调试,全bao定制等)
  • 【海斗小助手】0.9.1 版本更新公告:同步官方 26.12 最新版本变动
  • 【Springboot毕设全套源码+文档】基于spring boot的图书交易平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 为什么Sunshine能帮你实现零延迟游戏串流:3个实战秘诀
  • WPF 自定义容器控件的布局