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

    hdu1506:http://acm.hdu.edu.cn/showproblem.php?pid=1506

    题意:给你一些直的的方块,这些方块的底部在同一条直线上,但是高度不一样,让你找一个最大的方块,这个方块是由这些矩阵拼起来的。

    题解:自己太渣了,完全不会这一题怎么写,发现自己的思维能力太弱了,根本不会思考,。。。。不说了,继续努力。这一题要处理出以每个方块为中心向左向右分别能扩展的距离,所谓能扩展就是指左边最长的比他大的距离,这样计算的时候就可以知道如果以这个方块的高度为矩阵的高,最大会得到的面积。处理完之后,然后for一遍得到最大面积。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=5*1e5+4;
     7 int ll[N],rr[N];
     8 int a[N];
     9 long long ans;
    10 int n;
    11 int main(){
    12    while(~scanf("%d",&n)&&n){
    13       memset(ll,0,sizeof(ll));
    14       memset(rr,0,sizeof(rr));
    15       memset(a,-1,sizeof(a));
    16       for(int i=1;i<=n;i++)
    17         scanf("%d",&a[i]);
    18       for(int i=1;i<=n;i++){
    19             ll[i]=i;
    20             if(i==1)continue;
    21           int t=i-1;
    22          while(a[i]<=a[t]){
    23             ll[i]=ll[t];
    24             t=ll[t]-1;
    25          }
    26       }
    27       for(int i=n;i>=1;i--){
    28             rr[i]=i;
    29             if(i==n)continue;
    30           int t=i+1;
    31          while(a[i]<=a[t]){
    32             rr[i]=rr[t];
    33             t=rr[t]+1;
    34          }
    35       }
    36         ans=0;
    37       for(int i=1;i<=n;i++)
    38         ans=max(ans,(long long)(rr[i]-ll[i]+1)*(long long)a[i]);
    39         printf("%I64d
    ",ans);
    40    }
    41 }
    View Code
  • 相关阅读:
    LINQ to DataSet
    LINQ to SQL
    $.ajax()方法解析
    【转】数据库获得当前时间getdate()
    几种单例模式解析
    WebView上实现Java与JavaScript交互
    Dapper(.NET下的ORM框架)的基本使用
    IPtables中SNAT和MASQUERADE的区别
    我的桌面版fedora10安装
    我的fedora10的virtual box网络设置
  • 原文地址:https://www.cnblogs.com/chujian123/p/3868950.html
Copyright © 2011-2022 走看看