题目大意:原题链接
一排紧密相连的矩形,求能构成的最大矩形面积。
为了防止栈为空,所以提前加入元素(-1,0)
#include<cstdio> #include<stack> #define maxn 100005 using namespace std; long long h[maxn]; struct Element { long long height; int startpos; Element(){} Element(long long _h,int _p){ height=_h,startpos=_p; } /*Element(long long _h, int _p):height(_h), startpos(_p) { //和上面的一样的效果 }*/ }; int n,now,curpos; long long ans,curArea,maxArea,curheight; long long get_Max() { stack<Element> S; S.push(Element(-1,0)); maxArea=0; for(int i=0;i<=n;i++){ curpos=i+1; if(i==n) curheight=0; else curheight=h[curpos-1]; Element now(curheight,curpos); while(S.top().height>curheight){ now=S.top(); S.pop(); curArea=(curpos-now.startpos)*now.height; if(curArea>maxArea) maxArea=curArea; } S.push(Element(curheight,now.startpos));//注意入栈的now.startpos,不是curpos } return maxArea; } int main() { while(scanf("%d",&n),n){ for(int i=0;i<n;i++) scanf("%lld",&h[i]); ans=get_Max();//get_Max()有返回值,傻逼,记得写一个ans printf("%lld ",ans); } }