單調棧 51nod 1437邁克步

2021-09-09 04:40:31 字數 1192 閱讀 2805

有n隻熊。他們站成一排隊伍,從左到右依次1到n編號。第i隻熊的高度是ai。一組熊指的隊伍中連續的乙個子段。組的大小就是熊的數目。而組的力量就是這一組熊中最小的高度。邁克想知道對於所有的組大小為x(1 ≤ x ≤ n)的,最大力量是多少。

有n隻熊。他們站成一排隊伍,從左到右依次1到n編號。第i隻熊的高度是ai。

一組熊指的隊伍中連續的乙個子段。組的大小就是熊的數目。而組的力量就是這一組熊中最小的高度。

邁克想知道對於所有的組大小為x(1 ≤ x ≤ n)的,最大力量是多少。

單組測試資料。

第一行有乙個整數n (1 ≤ n ≤ 2×10^5),表示熊的數目。

第二行包含n個整數以空格分開,a1, a2, ..., an (1 ≤ ai ≤ 10^9),表示熊的高度。

在一行中輸出n個整數,對於x從1到n,輸出組大小為x的最大力量。
10

1 2 3 4 5 4 3 2 1 6

6 4 4 3 3 2 2 1 1 1
以下為非遞減單調棧入棧順序

根據單調棧的性質可知,如果從前往**棧則每次出棧的數的向右最大範圍即為你此時入棧的數的下標 

同理從後往前入棧可以知道你每個數在子串裡為最小數時向左的最大範圍

注:答案一定是非遞增,因為小字串包含在大子串內部

#include #include #include #include #include #include #include #include typedef long long ll;

using namespace std;

const int maxn=2e5+10;

int a[maxn],l[maxn],r[maxn],n,sta1[maxn],sta2[maxn],c,ans[maxn];

int main()

for(int i=n;i>=1;i--)

if(ans[i]

for(int i=1;i<=n;i++)

printf("%d ",ans[i]);

return 0;

}

51nod 1272 最大距離 單調棧

1272 最大距離 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給出乙個長度為n的整數陣列a,對於每乙個陣列元素,如果他後面存在大於等於該元素的數,則這兩個數可以組成一對。每個元素和自己也可以組成一對。例如 可以組成11對,如下 數字為下標 ...

51nod 1279 扔盤子(單調棧)

開始是直接從井口往裡扔,複雜度是o n 2 超時。然後呢,你會發現,如果井上邊的寬度小,下邊的寬度大,那麼下邊寬度多大都是沒用的,所以就讓他等於上邊寬度就好了。然後處理後這個井的寬度從上到下就是乙個非遞增的了,然後從下向上匹配,o n 還可以用單調棧預處理 include include const...

51Nod 1349 最大值(單調棧)

1349 最大值 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有一天,小a給了小b一些數字,讓小b幫忙找到其中最大的數,由於小b是乙個程式猿,當然寫了乙個 很快的解決了這個問題。這時,的小c又出現了,他問小b,假如我只需要知道這些數字中的某個區間的最大值,你還...