題意:給出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的大於他的數夾著,他會被從隊尾調出佇列 得到最大值。向右移動一格,假如隊首離開範圍,出隊。往隊尾加入元素前,把隊尾的...