• hdu 1506 Largest Rectangle in a Histogram



    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506

    题意:

    给出n个数(如图代表矩形的高,矩形的宽统一为1)。问合并成的图形中,内置最大矩形面积是多少?

    思路:a[i]代表每个矩形的高;以第i个矩形的高为内置矩形的高,l[i]表示该内置矩形的左边,r[i]代表右边。

    问题转化为求l[i]和r[i]。

     求l[i]和r[i]用类似于链表的方法,详见代码。


     1 #include <iostream>
     2 using namespace std;
     3 
     4 const int N = 100005;
     5 
     6 int l[N], r[N];
     7 long long a[N];
     8 long long max2(long long x, long long y)
     9 {
    10     return x > y ? x : y;
    11 }
    12 
    13 int main()
    14 {
    15     int n;
    16     while(cin>>n)
    17     {
    18         if(n==0break;
    19         for(int i=1; i<=n; i++)
    20         {
    21             cin >> a[i];
    22             l[i] = r[i] = i;
    23         }
    24         a[0] = a[n+1] = -1;
    25         for(int i=1; i<=n; i++)
    26         {
    27             while(l[i]-1>=1 && a[l[i]-1]>=a[i])
    28                 l[i] = l[l[i]-1];
    29         }
    30         for(int i=n; i>=1; i--)
    31         {
    32             while(r[i]+1<=n && a[r[i]+1]>=a[i])
    33                 r[i] = r[r[i]+1];
    34         }
    35         /*
    36         cout << "  ";
    37         for(int i=1; i<=n; i++)
    38             cout << l[i] << " ";
    39         cout << endl;
    40         cout << "  ";
    41         for(int i=1; i<=n; i++)
    42             cout << r[i] << " ";
    43         cout << endl;
    44         */
    45         long long ans = 0;
    46         for(int i=1; i<=n; i++)
    47         {
    48             ans = max2(ans, a[i]*(r[i]-l[i]+1)); //精度问题,a[]要开成long long,否则"a[i]*(r[i]-l[i]+1)"这句是按int计算在类型转换成long long,计算过程溢出
    49         }
    50         cout << ans << endl;
    51     }
    52     return 0;
    53 }
    View Code 
  • 相关阅读:
    Hadoop学习笔记1:伪分布式环境搭建
    VMware 下的CentOS6.7 虚拟机与Windows7通信
    CentOS6.7 下安装JDK
    [HDU 1430] 魔板
    数码问题合集
    [light oj 1328] A Gift from the Setter
    [light oj 1013] Love Calculator
    [POJ 1151] Atlantis
    关于12月28日到12月29日
    [HDU 1199] Color the Ball
  • 原文地址:https://www.cnblogs.com/byluoluo/p/3525658.html
Copyright © 2020-2023  润新知