題意大概講述的是有許多寬度為1的矩形,問你最大面積的矩形是多少。
更具模型可以得知,要是有乙個高度較小塊進入後,無法給前面高度較高的塊增加同一高度的面積。這時候就可以處理前面的高塊,因為現在的塊是較低的,已經沒辦法可以接到後面較高的。所以刪去前面所有比當前塊高的塊,並且處理這些塊可以得到的面積。最後一次性處理所有剩下的塊。
#include#include#include#includeusing namespace std;
int n;
typedef long long ll;
const int maxx = 100005;
struct node
stack[maxx];
int top;
int main()
else
stack[top].h = now;
stack[top++].w = 1 + len;
}} int len = 0;
while (top - 1 >= 0)
printf("%lld\n", ans);
} return 0;
}
本人愚見,如有不足,歡迎指點。
POJ2559 單調佇列
題目大意 給定n個連續的寬度為1的矩形,求最大子矩形面積。求一遍每個點向右延伸的最長長度,再反著求一遍每個點向左延伸的最長長度,兩個加起來 要減去重複計算的本身長度 取最優解。這題為什麼會wa呢?因為可能會有長度為0的矩形,這時候必須往佇列裡push個 1才能把它彈出來。而如果不把它彈出來,它的延伸...
poj 2559 最大矩形面積(單調棧)
題目 輸入乙個整數n,代表有n個 1 寬度 h i 高度 的矩形。接下來n個數依次給定乙個矩形高度的高度h i i n 求 在給定的依次排列的這堆矩形構成的圖形裡用乙個矩形圈出最大的乙個矩形,求該最大矩形面積。include include include using namespace std t...
POJ 2559 題解 最大矩形面積 單調棧
地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3 3 口 口 口口 回回 口口 口口 回回 口口 口 口...