poj 2559 最大矩形面積(單調棧)

2022-07-17 10:42:13 字數 576 閱讀 7204

題目:輸入乙個整數n,代表有n個  1(寬度) * h【i】(高度)的矩形。接下來n個數依次給定乙個矩形高度的高度h【i】(i<=n)。

求:在給定的依次排列的這堆矩形構成的圖形裡用乙個矩形圈出最大的乙個矩形,求該最大矩形面積。

#include#include

#include

using

namespace

std;

typedef

long

long

ll;ll h[

100005],s[5000005],w[5000005

];int

n,p;

intmain()

else

//如果當前矩形比之前矩形低,那就出棧棧中矩形,直到有矩形比它低

w[++p]=wid+1;//

將新矩形入棧

s[p]=h[i];}}

while (p!=0)//

將所有矩形出棧,按照上面的方法計算面積,更新答案

printf(

"%lld\n

",ans);

}}

POJ 2559 題解 最大矩形面積 單調棧

地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3 3 口 口 口口 回回 口口 口口 回回 口口 口 口...

POJ2559 單調佇列

題目大意 給定n個連續的寬度為1的矩形,求最大子矩形面積。求一遍每個點向右延伸的最長長度,再反著求一遍每個點向左延伸的最長長度,兩個加起來 要減去重複計算的本身長度 取最優解。這題為什麼會wa呢?因為可能會有長度為0的矩形,這時候必須往佇列裡push個 1才能把它彈出來。而如果不把它彈出來,它的延伸...

POJ2559 單調遞增棧

題意大概講述的是有許多寬度為1的矩形,問你最大面積的矩形是多少。更具模型可以得知,要是有乙個高度較小塊進入後,無法給前面高度較高的塊增加同一高度的面積。這時候就可以處理前面的高塊,因為現在的塊是較低的,已經沒辦法可以接到後面較高的。所以刪去前面所有比當前塊高的塊,並且處理這些塊可以得到的面積。最後一...