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;
}
相关推荐
minstbe8 小时前
半导体数据分析:GPR算法小白入门(三) 晶体管I-V特性仿真教程
算法
未知陨落9 小时前
LeetCode:60.单词搜索
算法·leetcode
什么半岛铁盒9 小时前
C++项目:仿muduo库高并发服务器------EventLoop模块的设计
linux·服务器·c++·mysql·ubuntu
mmz12079 小时前
动态规划 练习(c++)
c++·算法·动态规划
tqs_1234510 小时前
分sheet写入excel
开发语言·python·算法
Roc-xb10 小时前
解决Compile Run插件运行c/c++中文乱码问题
c语言·开发语言·c++
西望云天10 小时前
基础组合计数(三道例题)
数据结构·算法·icpc
凤年徐10 小时前
【C++模板编程】从泛型思想到实战应用
java·c语言·开发语言·c++
深思慎考10 小时前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(5——通过cpp-httplib库建立网页模块)
linux·c++·搜索引擎
freedom_1024_11 小时前
【C++】深入理解const 成员函数
c++