zoukankan      html  css  js  c++  java
  • hdu 1506 Largest Rectangle in a Histogram

    //给一个柱形图,找到其中面积最大的矩形。
    //对于每一个柱形,找到它最左边的,高度大于等于它下标, 同理也要找到它最右边的,高度大于等于它的 下标。
    //但如果普通的顺序遍历的话,最坏情况会退化成O(n^2),这里的优化方法就是,如果当前查找的柱形比它大于等于,那么就直接去找当前柱形的边界。
    //这样的话,查找就是跳跃式的。
    
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    #define N 100005
    long long h[N],l[N],r[N];
    int main()
    {
        int n,tmp;
        while(scanf("%d",&n)&&n)
        {
            for(int i=1;i<=n;i++)
                scanf("%I64d",&h[i]);
            h[n+1]=h[0]=-1;
            l[1]=1;
            r[n]=n;
            for(int i=1;i<=n;i++)
            {
                tmp=i;
                while(1)
                {
    
                    if(h[tmp-1]>=h[i]) tmp=l[tmp-1];
                    else break;
                }
                l[i]=tmp;
            }
            for(int i=n;i>=1;i--)
            {
                tmp=i;
                while(1)
                {
                    if(h[tmp+1]>=h[i]) tmp=r[tmp+1];
                    else break;
                }
                r[i]=tmp;
            }
            long long ans=0;
            for(int i=1;i<=n;i++)
            {
                ans=max(ans,h[i]*(r[i]-l[i]+1));
            }
            printf("%I64d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    jquery手写实现单页滚动导航
    小程序:商品分类,实现滑块视图
    微信小程序增加悬浮在线客服
    小程序 杂记
    自动售货机 扫描支付 原理
    HTTP的SSL 证书安装
    表达
    Linux 下svn恢复到某一版本
    倒车入库 技巧
    svn 杂记
  • 原文地址:https://www.cnblogs.com/riskyer/p/3235393.html
Copyright © 2011-2022 走看看