P5788 模板 單調棧

2021-10-09 08:26:55 字數 1096 閱讀 5450

題目背景

模板題,無背景。

2019.12.12 更新資料,放寬時限,現在不再卡常了。

題目描述

給出項數為 nnn 的整數數列 a1…na_a1…n​。

定義函式 f(i)f(i)f(i) 代表數列中第 iii 個元素之後第乙個大於 aia_iai​ 的元素的下標,即 f(i)=min⁡iaif(i)=\min_ f(i)=miniai​​。若不存在,則 f(i)=0f(i)=0f(i)=0。

試求出 f(1…n)f(1\dots n)f(1…n)。

輸入格式

第一行乙個正整數 nnn。

第二行 nnn 個正整數 a1…na_a1…n​。

輸出格式

一行 nnn 個整數 f(1…n)f(1\dots n)f(1…n) 的值。

輸入輸出樣例

輸入 #1

51 4 2 3 5

輸出 #1

2 5 4 5 0

說明/提示

【資料規模與約定】

對於 30%30%30% 的資料,n≤100n\leq 100n≤100;

對於 60%60%60% 的資料,n≤5×103n\leq 5 \times 10^3n≤5×103 ;

對於 100%100%100% 的資料,1≤n≤3×1061 \le n\leq 3\times 10^61≤n≤3×106,1≤ai≤1091\leq a_i\leq 10^91≤ai​≤109。

#include

#include

#include

using

namespace std;

const

int maxn =

3e6+10;

int a[maxn]

, st[maxn]

, ans[maxn]

;int top;

int n;

intmain()

for(

int i =

1; i <= n; i++

)printf

("%d "

, ans[i]);

return0;

}

P5788 模板 單調棧

5788 題目背景 模板題,無背景。2019.12.12 更新資料,放寬時限,現在不再卡常了。題目描述 給出項數為 nn 的整數數列 a a 1 n 定義函式 f i f i 代表數列中第 ii 個元素之後第乙個大於 ai 的元素的下標,即 f i min f i miniai 若不存在,則 f i...

單調棧 模板 單調棧模板

biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...

單調棧模板

顧名思義就是棧裡的元素是單調的。但是這個怎麼使用呢?怎麼就能是單調的呢?看下面的例題 題目給定乙個長度為n的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 1。輸入樣例 5 3 4 2 7 5 輸出樣例 1 3 1 2 2 題目意思很容易理解 那麼我們先來看暴力做法,每次取乙個數,與前面...