qduoj LC的課後輔導(單調棧)

2021-08-03 21:48:37 字數 896 閱讀 7722

描述

有一天,lc給我們出了一道題,如圖:

這個圖形從左到右由若干個 寬為1 高不確定 的小矩形構成,求出這個圖形所包含的最大矩形面積。

輸入多組測試資料

每組測試資料的第一行為n(0 <= n <= 100), 表示圖形有n個小矩形構成

接下來一行輸入n個整數h1, h2...hn(0 <= hi <= 1000), 表示每個小矩形的高度

n為0時程式結束

輸出僅輸出一行表示面積的最大值

樣例輸入1

複製

7

2 1 4 5 1 3 3

41000 1000 1000 1000

0

樣例輸出1

8

4000

遍歷每乙個點,確定出該點可以延伸到的端點,就確定了矩形的底,再乘以該點的值就是面積

#include#include#includeusing namespace std;

const int m = 105;

int a[m];

int l[m];

int r[m];

stackst;

int main()

while(st.size())

st.pop();

for(int i=1;i<=n;i++)//確定左端點

while(st.size())

st.pop();

for(int i=n;i>0;i--)//確定右端點

int ans=int_min,tmp;

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

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

}return 0;

}

單調棧的應用

問題描述 柱狀圖是有一些寬度相等的長方形下端對齊後橫向排列得到的圖形。現在有n個由寬度為1,高度分別為h1,h2,hn的長方形從左到右依次排列組成的柱狀圖。問裡面包含的長方形的最大面積是多少?分析 最容易想到的方法是 討論左端l和右端r。如果確定了長方形的左端l和右端r,那麼最大的可能高度就是min...

單調棧的運用

單調棧本質上只是單調遞增或遞減的棧,有點類似於單調佇列,但不同之處在於插入乙個元素時,會彈出棧中 所有不符合單調性的元素 來個例子吧!當乙個單增的棧stack 向其中壓入元素6時,stack 向其中壓入元素2時,stack彈出2,3,4,且stack 向其中壓入0時,stack彈出1,2,3,4,s...

單調棧的運用

題目大意 有一群列隊,面朝右站立的牛,輸入每頭牛的身高,如果視線前方有一頭高於自己的牛,則看不到它之後的牛 求出所有牛能看到頭頂的個數。n方演算法超時,故考慮優化,首先能想到的是,在計算左邊的牛能看到多少牛時,可以利用右邊的結果。棧優化的思路即是,從右向左遍歷牛的身高,同時對棧進行操作 棧中存放牛的...