PKU 2082 Terrible Sets(单调栈)
题目大意:原题链接
一排紧密相连的矩形,求能构成的最大矩形面积。
为了防止栈为空,所以提前加入元素(0,0).
#include<cstdio> #include<stack> #define maxn 50005 using namespace std; struct Element { int length; int height; Element(){} Element(int _w,int _h){ length=_w,height=_h; } }e[maxn]; int n,curlength,curheight,curArea,maxArea; stack<Element> S; int get_Max() { S.push(Element(0,0)); maxArea=0; for(int i=0;i<=n;i++){ curheight=e[i].height; curlength=0; while(S.top().height>curheight){ Element now=S.top(); S.pop(); curlength+=now.length; curArea=curlength*now.height; if(curArea>maxArea) maxArea=curArea; } curlength+=e[i].length; S.push(Element(curlength,curheight)); } return maxArea; } int main() { while(scanf("%d",&n),n!=-1){ for(int i=0;i<n;i++) scanf("%d%d",&e[i].length,&e[i].height); e[n].height=e[n].length=0; int ans=get_Max(); printf("%d\n",ans); } return 0; }