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;
}
相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
weilx12343 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
Smileyqp沛沛3 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
m0_547486663 天前
《数据结构教程》全套 PPT课件2026
数据结构
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
吞下星星的少年·-·3 天前
C++ 萌新语法入门篇
c++·算法比赛