Week5 A 最大矩形

2021-10-04 11:05:21 字數 1356 閱讀 8279

week5 a - 最大矩形

給乙個直方圖,求直方圖中的最大矩形的面積。例如,下面這個中直方圖的高度從左到右分別是2, 1, 4, 5, 1, 3, 3, 他們的寬都是1,其中最大的矩形是陰影部分。

input

輸入包含多組資料。每組資料用乙個整數n來表示直方圖中小矩形的個數,你可以假定1 <= n <= 100000. 然後接下來n個整數h1, …, hn, 滿足 0 <= hi <= 1000000000. 這些數字表示直方圖中從左到右每個小矩形的高度,每個小矩形的寬度為1。 測試資料以0結尾。

output

對於每組測試資料輸出一行乙個整數表示答案。

sample input

721

4513

341000

1000

1000

1000

0

sample output

8

4000

解題思路

利用單調遞增棧 單調遞減棧 由左至右 由右至左

單調棧實現 : 若要插入的值不滿足當前最上層元素的值 將最上層元素推出 重複檢驗至最上層元素滿足將要插入值 再將值插入

遍歷出每個點左邊與右邊第乙個出現比自身小的點記錄在陣列中 使得這個點是這段範圍內最矮的

最後利用每個點的左右範圍乘上自身高度

注意

輸出時資料很大要用 long long 或是一開始將所有變數設 long long

用 scanf 比較不容易tl

code

#include

#include

using

namespace std;

int p[

101000];

int pl[

101000];

int pr[

101000];

intmain()

for(

int i=

1;i<=t+

1;i++

) st.

push

(i);

}for

(int i=t;i>=

0;i--

) st.

push

(i);

}for

(int i=

1;i<=t;i++

) cout<}}

Week5 A 最大矩形(單調棧)

給乙個直方圖,求直方圖中的最大矩形的面積。例如,下面這個中直方圖的高度從左到右分別是 2,1,4,5,1,3,3,他們的寬都是1,其中最大的矩形是陰影部分。輸入包含多組資料。每組資料用乙個整數n來表示直方圖中小矩形的個數,你可以假定1 n 100000.然後接下來n個整數h1,hn,滿足 0 hi ...

week5 作業A 最大矩形

給乙個直方圖,求直方圖中的最大矩形的面積。例如,下面這個中直方圖的高度從左到右分別是2,1,4,5,1,3,3,他們的寬都是1,其中最大的矩形是陰影部分。input 輸入包含多組資料。每組資料用乙個整數n來表示直方圖中小矩形的個數,你可以假定1 n 100000.然後接下來n個整數h1,hn,滿足 ...

Week5 HomeWork A 最大矩形 單調棧

演算法 思路分析 給乙個直方圖,求直方圖中的最大矩形的面積。例如,下面這個中直方圖的高度從左到右分別是2,1,4,5,1,3,3,他們的寬都是1,其中最大的矩形是陰影部分。輸入包含多組資料。每組資料用乙個整數n來表示直方圖中小矩形的個數,你可以假定1 n 100000.然後接下來n個整數h1,hn,...