首页 > 其他分享 >P5788 【模板】单调栈

P5788 【模板】单调栈

时间:2024-08-27 10:28:47浏览次数:13  
标签:dots 10 leq int P5788 插入 单调 模板

P5788 【模板】单调栈

传送门

题目描述

给出项数为 \(n\) 的整数数列 \(a_{1 \dots n}\)。

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

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

输入格式

第一行一个正整数 \(n\)。

第二行 \(n\) 个正整数 \(a_{1\dots n}\)。

输出格式

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

样例 #1

样例输入 #1

5
1 4 2 3 5

样例输出 #1

2 5 4 5 0

提示

【数据规模与约定】

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

对于 \(60\%\) 的数据,\(n\leq 5 \times 10^3\) ;

对于 \(100\%\) 的数据,\(1 \le n\leq 3\times 10^6\),\(1\leq a_i\leq 10^9\)。

前要芝士:单调栈

什么是单调栈:

单调栈:顾名思义,单调栈即满足单调性的栈结构。

简单来说,就是栈内的数一直保持递增或递减的关系。

实现:

插入: 每次插入时为保证栈内递增或递减,我们将栈顶的元素不断与将插入的数进行比较,如果不能符合数字插入后保持递增或递减,就将栈顶元素删除。这样可以有效保证栈内保持单调性,这就是单调队列的插入操作

我们可以使用如下代码模拟插入(以单调递增为例):

scanf("%d")
while(!q.empty()&&q.top()<x)
  q.pop();
q.push(x);

本题思路

我们使用单调递增的单调栈存储数组下标 (因为题目要求输出数组下标),如果一个数被弹出,就说明找到了从自身往右数的第一个大于它的数,如果直到结束也没有弹出,就说明右边没有比它大的数字了(不理解的自行看代码和模拟)。

ACcode

#include<bits/stdc++.h>
using namespace std;
const int N=3*1e6+10;
int n,a[N],r[N];
stack<int> q;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
	{
		while(!q.empty()&&a[q.top()]<a[i])  //存储数字下标
		{
		   	r[q.top()]=i;               //存储答案
			 q.pop();
		}
		q.push(i);
	}
	for(int i=1;i<=n;i++)
		cout<<r[i]<<' ';
	return 0;
}

如果觉得不错的话点个关注喵~qwq

标签:dots,10,leq,int,P5788,插入,单调,模板
From: https://www.cnblogs.com/Hyper-zero/p/18382157

相关文章

  • WPF 模板
    一、数据模板继承了ItemConrol的控件对象(如ListView、ListBox、DataGrid、TabControl等等),都可以使用数据模板DataTemplate。数据模板的作用在于决定每个Item中的数据的展示形式。普通控件通过Template属性来定义模板,而子项容器控件则通过ItemTemplate属性来定义子项模板。先创......
  • AE全套视频课程(视频+模板+练习文件)零基础必看
    视频课程超全练习文件模板完整版下载链接夸克:https://pan.quark.cn/s/54a848eb52e2如果夸克容量不足,可以参考这篇文章免费扩容 夸克网盘免费扩容......
  • 苹果cms影视海螺模板V4.0优化版整站源码
    苹果cms影视海螺模板V4.0优化版整站源码苹果CMS是一款流行的影视网站管理系统,它允许用户轻松地创建和管理自己的影视内容网站。影视海螺模板V4.0优化版是针对苹果CMS设计的一个模板,它提供了更加美观和功能丰富的界面,以及一些性能和用户体验上的优化。以下是关于苹果CMS影视海......
  • 【生日视频制作】广州塔表白字幕生日视频制作AE模板修改文字软件生成器教程特效素材【
    广州塔表白字幕生日视频制作教程AE模板改文字生成神器素材祝福怎么如何做的【生日视频制作】广州塔表白字幕生日视频制作AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......
  • 【生日视频制作】一群美女挥手拉蓝横幅条幅AE模板修改文字软件生成器教程特效素材【AE
    一群美女挥手拉蓝条横幅生日视频制作教程AE模板修改文字生成器怎么如何做的【生日视频制作】一群美女挥手拉蓝横幅条幅AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......
  • 海螺影视主题模板M3.1全解密版本 多功能苹果CMSv10自适应主题
    海螺影视主题模板M3.1全解密版本 多功能苹果CMSv10自适应主题海螺影视主题模板M3.1全解密版本多功能苹果CMSv10自适应主题源码介绍海螺影视主题模板M3.1是一款专为苹果CMSv10设计的自适应主题模板。该模板旨在提供一个美观、易用且功能丰富的界面,以满足影视网站的需求。模......
  • A2034热门电影视频网站模版源码 仿爱美剧网站模板源码 自适应手机端 内含 视频 资讯
    A2034热门电影视频网站模版源码 仿爱美剧网站模板源码 自适应手机端 内含 视频 资讯 留言热门电影视频网站模版源码-A2034源码介绍A2034是一款仿爱美剧网站模板的热门电影视频网站模版源码。该模版设计精美,功能齐全,支持自适应手机端浏览,为用户提供优质的视频观看体......
  • WPF中如何根据数据类型使用不同的数据模板
    我们在将一个数据集合绑定到列表控件时,有时候想根据不同的数据类型,显示为不同的效果。例如将一个文件夹集合绑定到ListBox时,系统文件夹显示为不同的效果,就可以使用模板选择器功能。WPF提供了一个模板选择器类型DataTemplateSelector,它可以根据数据对象和数据绑定元素来选择 Dat......
  • 【生日视频制作】航拍哈尔滨超大堆雪人AE模板修改文字软件生成器教程特效素材【AE模板
    哈尔滨超大堆雪人生日视频制作教程AE模板修改文字软件生神器素怎么如何做的【生日视频制作】航拍哈尔滨超大堆雪人AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......
  • 新建一个基于标准新建一个基于标准固件库的工程模板固件库的工程模板(实现LED单灯闪烁)
    实验报告原件在资源可选择性下载一、实验目的:1.了解STM32固件库;2.掌握STM32固件库关键子目录及固件库关键文件;3.能够新建一个基于标准固件库的工程模板并完成编译二、实验器材:笔记本或电脑。三、实验内容:1.构建proteus8LED构图。2.STM32构建适应于keil5的编译器格式......