洛谷 P5788 【模板】单调栈

题目背景

模板题,无背景。

2019.12.12 更新数据,放宽时限,现在不再卡常了。

题目描述

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

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

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

输入格式

第一行一个正整数 n。

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

输出格式

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

输入输出样例

输入 #1复制

复制代码
5
1 4 2 3 5

输出 #1复制

复制代码
2 5 4 5 0

说明/提示

【数据规模与约定】

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

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

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

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+10;
int n;
int a[N];
int ret[N];
void test()
{
    stack<int> st;
    for(int i=n;i>=1;i--)
    {
        while(st.size()&&a[st.top()]<=a[i])
        st.pop();
        if(st.size())
        ret[i]=st.top();
        st.push(i);
    }
    for(int i=1;i<=n;i++)
    {
        cout<<ret[i]<<" ";
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    test();
    return 0;
}
相关推荐
庞轩px几秒前
MinorGC的完整流程与复制算法深度解析
java·jvm·算法·性能优化
Queenie_Charlie6 分钟前
Manacher算法
c++·算法·manacher
闻缺陷则喜何志丹7 分钟前
【树的直径 离散化】 P7807 魔力滋生|普及+
c++·算法·洛谷·离散化·树的直径
AI_Ming14 分钟前
Seq2Seq-大模型知识点(程序员转行AI大模型学习)
算法·ai编程
若水不如远方21 分钟前
分布式一致性(六):拥抱可用性 —— 最终一致性与 Gossip 协议
分布式·后端·算法
计算机安禾24 分钟前
【C语言程序设计】第35篇:文件的打开、关闭与读写操作
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
Wect33 分钟前
React Hooks 核心原理
前端·算法·typescript
美式请加冰41 分钟前
字符串的介绍和使用
算法
m0_733612211 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
仰泳的熊猫1 小时前
题目2571:蓝桥杯2020年第十一届省赛真题-回文日期
数据结构·c++·算法·蓝桥杯