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;
}
相关推荐
x_yeyue1 小时前
三角形数
笔记·算法·数论·组合数学
Mr. zhihao2 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路2 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
小小编程路2 小时前
C++ 多线程与并发
java·jvm·c++
失去的青春---夕阳下的奔跑2 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光3 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩3 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494733 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
程序leo源3 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#