SCU 2511 Moooo 單調棧模板題

2021-08-07 05:26:43 字數 899 閱讀 6264

題意:給出n頭牛,每頭牛都會發出乙個雜訊,為v[i]。這個雜訊只會被與他相鄰高度嚴格比他高的牛所聽到,問牛收到的最大的噪音是多少。

解法:因為我是在黃學長部落格上找的題目23333,所以就是一道單調棧的模板題了。bzoj又把這題藏起來了,還好scu上面有這道題。

直接正著跑一遍,如果當前牛的高度低於棧頂牛的高度,則入棧,否則,讓棧裡面高度比他低的牛都出棧,並且對應的雜訊加到當前牛上面,然後再把這頭牛入棧。

然後反著跑一遍。

然後找一找最大值是多少即可。

**如下:

#include#include#include#includeusing namespace std;

typedef pairpii;

const int maxn = 5e4 + 5;

int h[maxn], v[maxn];

int sum[maxn];

stack sta;

int n;

int main()

sta.push(pii(h[0], v[0]));

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

sta.push(pii(h[i], v[i]));

} while(!sta.empty())

sta.pop();

sta.push(pii(h[n - 1], v[n - 1]));

for(int i = n - 2; i >= 0; i--)

sta.push(pii(h[i], v[i]));

} int max = 0;

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

printf("%d\n", max);

} return 0;

}

單調棧 模板 單調棧模板

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

單調棧模板

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

模板 資料結構 單調佇列 單調棧

一道例題,給定一串數字,求每連續k個數字的最大 最小值。思路 初始化乙個初始長度為k的單調佇列,按從左到右加入元素,同時滿足這個佇列中的元素是遞減的 也就是假如某個數被兩個距離不超過k的大於他的數夾著,他會被從隊尾調出佇列 得到最大值。向右移動一格,假如隊首離開範圍,出隊。往隊尾加入元素前,把隊尾的...