当前位置: 首页 > 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.jsqmd.com/news/997544/

相关文章:

  • 2026年6月便携式污泥浓度计主要品牌排行榜:国产品牌全面崛起,精准选型赋能水处理行业提质增效 - 仪表品牌排行榜
  • MLIR专题9:方言下译(lowering)
  • 2026年AI大模型API聚合平台选型指南:稳定性、兼容性与成本深度对比
  • 2026年集装箱厂家怎么选?西南市场深度解析与供应商综合评测 - 优质品牌商家
  • 2026 佛山卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 别再乱用set_input_transition了!给理想时钟设置转换时间的正确姿势(Design Compiler/PrimeTime)
  • 中兴光猫工厂模式完全解锁指南:zteOnu工具终极使用教程
  • PyTorch反向传播实战:手动推导梯度流与NaN调试指南
  • Qdrant混合搜索实战:语义+关键词+过滤一体化架构解析
  • 温州卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 2026 常州卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 课后习题:第九章
  • 2026 唐山卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 2026年电渗析定制厂家深度对比:技术、工程与性价比的全面分析 - 优质品牌商家
  • 良田高拍仪Windows开发套件:ScanCtrl.ocx控件+7种语言Demo+上传示例
  • G-Helper:华硕笔记本性能调校的革命性开源方案
  • 基于代码嵌入的个性化编程习题推荐系统设计与实现
  • reductstore 高性能面向机器人以及IOT场景的存储以及流数据基石
  • 2026年企业数字权益采购趋势:可开票虚拟卡券供应商综合能力评估与案例解析 - 优质品牌商家
  • 数据库连接报错问题
  • GEO工具的效果如何?
  • EPLAN高效出图秘籍:巧用‘电位连接点’和‘网络定义点’优化大型项目图纸
  • 2026年6月医院消毒监测厂商怎么选,动物房试验/洁净工作台检测/卫生安全评价报告整体解决方案,医院消毒监测厂家哪家强 - 品牌推荐师
  • 2026年芝麻灰路沿石厂家电话怎么找?五莲石材产业园五大企业横向分析 - 优质品牌商家
  • Blender 3MF插件终极指南:轻松实现3D打印文件无缝转换
  • 2026 南通卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 深度解析MMD Tools架构设计:Blender与MMD工作流融合的5大核心技术实现原理
  • 2026免费证件照制作工具合集,手把手教你自制标准证件照 - 办公小帮手
  • 2026年固体聚合氯化铝供应格局:谁在主导西南市场? - 优质品牌商家
  • AJ-Captcha:企业级行为验证码架构设计与技术实现深度解析