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,...