P5788 【模板】单调栈

链接:P5788 【模板】单调栈 - 洛谷 | 计算机科学教育新生态

题目描述

给出项数为 nn 的整数数列 a1...na1...n​。

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

试求出 f(1...n)f(1...n)。

输入格式

第一行一个正整数 nn。

第二行 nn 个正整数 a1...na1...n​。

输出格式

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

输入输出样例

输入 #1复制

复制代码
5
1 4 2 3 5

输出 #1复制

复制代码
2 5 4 5 0

说明/提示

【数据规模与约定】

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

对于 60%60% 的数据,n≤5×103n≤5×103 ;

对于 100%100% 的数据,1≤n≤3×1061≤n≤3×106,1≤ai≤1091≤ai​≤109。

C++代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=3e6+5;
int a[N],ans[N];

int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    stack<int> sta;
    for(int i=n;i>=1;i--){
        while(!sta.empty()&&a[i]>=a[sta.top()]){
            sta.pop();
        }
        ans[i]=sta.empty()?0:sta.top();
        sta.push(i);
    }
    for(int i=1;i<=n;i++){
        cout<<ans[i]<<" ";
    }
    return 0;
}
相关推荐
永远睡不够的入2 分钟前
类和对象(中)
c++
飞鹰5111 分钟前
深度学习算子CUDA优化实战:从GEMM到Transformer—Week4学习总结
c++·人工智能·深度学习·学习·transformer
2301_7657031413 分钟前
C++中的职责链模式实战
开发语言·c++·算法
StandbyTime21 分钟前
《算法笔记》学习记录-第一章
c++·算法·算法笔记
近津薪荼26 分钟前
优选算法——双指针8(单调性)
数据结构·c++·学习·算法
f狐0狸x27 分钟前
【C++修炼之路】C++ list容器基本用法详解
开发语言·c++·list
松☆27 分钟前
Dart 中的常用数据类型详解(含 String、数字类型、List、Map 与 dynamic) ------(2)
数据结构·list
格林威27 分钟前
Baumer相机铆钉安装状态检测:判断铆接是否到位的 5 个核心算法,附 OpenCV+Halcon 的实战代码!
人工智能·opencv·算法·计算机视觉·视觉检测·工业相机·堡盟相机
wWYy.33 分钟前
C++-集群聊天室(2):muduo网络库
网络·c++
从此不归路1 小时前
Qt5 进阶【13】桌面 Qt 项目架构设计:从 MVC/MVVM 到模块划分
开发语言·c++·qt·架构·mvc