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++20 Modules:终结“头文件地狱”的曙光
c++·c++20·头文件·modules·编译优化
誰能久伴不乏5 分钟前
进程通信与线程通信:全面总结 + 使用场景 + 优缺点 + 使用方法
linux·服务器·c语言·c++
fish_xk7 分钟前
用c++写控制台贪吃蛇
开发语言·c++
念越7 分钟前
二叉树的核心概念与遍历实现(基础详解版)
数据结构
im_AMBER9 分钟前
数据结构 12 图
数据结构·笔记·学习·算法·深度优先
程序员-周李斌9 分钟前
LinkedList 源码深度分析(基于 JDK 8)
java·开发语言·数据结构·list
咫尺的梦想00710 分钟前
链表——删除链表的倒数第 N 个结点
数据结构·链表
梁bk15 分钟前
Redis底层数据结构 -- ziplist, quicklist, skiplist
数据结构·数据库·redis
Unlyrical29 分钟前
线程池详解(c++手撕线程池)
c++·线程·线程池·c++11
STY_fish_20121 小时前
P11855 [CSP-J2022 山东] 部署
算法·图论·差分