zoukankan      html  css  js  c++  java
  • PKU 2559 Largest Rectangle in a Histogram(单调栈)

    题目大意:原题链接

    一排紧密相连的矩形,求能构成的最大矩形面积。

    为了防止栈为空,所以提前加入元素(-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);
        }
    }
  • 相关阅读:
    C语言I博客作业01
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言II博客作业04
    C语言II博客作业03
    C语言II—作业02
    C语言II博客作业01
  • 原文地址:https://www.cnblogs.com/freinds/p/6425592.html
Copyright © 2011-2022 走看看