原题链接:https://www.luogu.com.cn/problem/P5788

单调栈

题目背景

模板题,无背景。

2019.12.12 更新数据,放宽时限,现在不再卡常了。

题目描述

给出项数为 nnn 的整数数列 a1…na_{1 \dots n}a1…n​ 。

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

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

输入格式

第一行一个正整数 nnn。

第二行 nnn 个正整数 a1…na_{1\dots n}a1…n​ 。

输出格式

一行 nnn 个整数 f(1…n)f(1\dots n)f(1…n) 的值。

输入输出样例

输入 #1
5
1 4 2 3 5
输出 #1
2 5 4 5 0

说明/提示

【数据规模与约定】

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

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

对于 100%100\%100% 的数据,1≤n≤3×1061 \le n\leq 3\times 10^61≤n≤3×106 ,1≤ai≤1091\leq a_i\leq 10^91≤ai​≤109 。

题解

题如其名,模板级别的单调栈。

要求每个数右侧第一个比它大的数的位置,维护一个单减的单调栈就可以了。因为每个数只会成为左侧连续递减且比它小的数的答案,每次尝试新加入一个数的时候把栈顶所有小于它的数直接弹出并记录答案,非常的easy。

代码

发现之前还用Python写过,可惜洛谷没有专门针对Python的评测标准,结果MLE60\mathcal{MLE}60MLE60滚粗了,索性一并贴在下面。

C++版:

#include<bits/stdc++.h>
using namespace std;
const int M=3e6+5;
int n,val[M],stk[M],top,ans[M];
void in()
{scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&val[i]);
}
void ac()
{for(int i=1;i<=n;stk[++top]=i++)for(;top&&val[i]>val[stk[top]];--top)ans[stk[top]]=i;for(int i=1;i<=n;++i)printf("%d ",ans[i]);
}
int main()
{in(),ac();system("pause");
}

Python版:

n=int(input())
que=input().split()
stk=[1e10]
num=[0]
ans=[0 for i in range(n)]
for i in range(n):new=int(que[i])#num.append(i)while stk[-1]<new:stk.pop()#print(num[-1])ans[num[-1]]=i+1num.pop()stk.append(new)num.append(i)
for i in ans:print(i,end=' ')

Luogu5788 【模板】单调栈相关推荐

  1. 【SSL 2882】[POJ 3250]排队【单调栈模板】

    排队 Time Limit:10000MS Memory Limit:65536K Case Time Limit:1000MS Description n个人排成一条直线(一排),给出队伍中每个人的 ...

  2. 365天挑战LeetCode1000题——Day 126 单调栈模板 500题纪念

    用时126天,完成500题,平均4题/天,照这个速率,我还需要四个月完成1000题挑战. 单调栈模板 class Solution {public:vector<int> nextGrea ...

  3. 【单调栈】【概念讲解模板代码】

    文章目录 什么是单调栈 模拟实例: 一.[模板]单调栈 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题目解析: 二.发射站 题目描述 输入格式 输出格式 样例 #1 ...

  4. 模板_单调栈_AcWing_830. 单调栈_底顶递增栈

    模板_单调栈_AcWing_830. 单调栈_底顶递增栈 830. 单调栈 题目 提交记录 讨论 题解 视频讲解 给定一个长度为 NN 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 − ...

  5. 差异:后缀数组(wzz模板理解),单调栈

    因为涉及到对模板的理解,所以就着代码看会好一些. 让那些坚决不颓代码的人受委屈了. 我是对着wzz的板子默写的,可能不完全一样啊. 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正. 可以有选择 ...

  6. 单调栈图文详解(附Java模板)

    啥是"单调栈",它能解决什么样的问题?

  7. 【每日训练】2020/11/8(规律 + 二进制、单调栈 + 前缀和,后缀和、bitset + 枚举)

    整理的算法模板合集: ACM模板 目录 1. NC 打铁的箱子(规律 + 二进制) 2. NC 最优屏障(单调栈 + 前缀和,后缀和) 3. CF993C Careful Maneuvering(bi ...

  8. 0x11.基本数据结构 — 栈与单调栈

    目录 一.栈 0.AcWing 41. 包含min函数的栈 (自己造栈) 1.AcWing 128. 编辑器 (对顶栈) 2.AcWing 129. 火车进栈 3.AcWing 130. 火车进出栈问 ...

  9. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

  10. ACM入门之【单调栈】

    何为单调栈,顾名思义,单调栈即满足单调性的栈结构. 单调栈解决的问题: 可以找到对于当前位置左边(或右边)最近的大于(或小于)它的值(或者下标). 常用模板: typedef long long in ...

最新文章

  1. 前缀列表(prefix-list)讲解
  2. 重磅!可以发朋友圈和搜一搜的PC端微信来了,赶紧来下载!
  3. 聊聊单体应用的 4 点不良影响,第 4 点很痛很真实
  4. Play! Framework 系列(三):依赖注入
  5. 创建线程时候多参数传递方法及参数改变问题--扫雷辅助(三)
  6. C++多线程编程分析-线程间通信
  7. [渝粤教育] 西南石油大学 数据库原理及应用 参考 资料
  8. 如何配置一个最基本的web富文本编辑器?--之wangEditor(验证成功)
  9. PHP: stdclass, 数组转成对象
  10. 动态规划的理解与案例分析
  11. 用Python发一封图文并茂的邮件 荐
  12. 董小姐宣布重磅升级:格力空调包修时长正式升级为10年
  13. 【work】输出日期为那一年的第几天
  14. hadoop作业引用第三方jar文件原理解析
  15. linux内核与用户之间的通信方式——虚拟文件系统、ioctl以及netlink .
  16. python爬虫和Java爬虫哪个更好
  17. linux ls-la/boot,CentOS系统启动/boot/vmlinuz修复(实验)
  18. JDBC————PreparedStatement批处理
  19. 财务管理流程图怎么画之你需要了解的流程图绘制技巧
  20. 深信服各种设备管理地址

热门文章

  1. POJ - 3233 —— 矩阵快速幂(分块矩阵与递归)
  2. Momentum, RMSprob and Adam
  3. Machine Learning Books List
  4. 使用Ligolo-ng建立隐蔽的通信信道
  5. 数据算法_数据结构和常用算法
  6. spring4.1.8扩展实战之七:控制bean(BeanPostProcessor接口)
  7. iOS 不规则的ImageView
  8. 201507152326_《Javascript实现跨域有4种方法——介绍jsonp和html5方法》
  9. TCP/IP 原理 -- ICMP:因特网控制报文协议
  10. MOSS 2010:Visual Studio 2010开发体验(13)——列表开发之列表实例