zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    Windows删除git本地记住的密码
    C++ fmt库的安装和测试
    仿照struct is_integral 实现struct not_int
    folly库net库udp小例子
    Java阻塞队列BlockingQueue
    正则表达式必知必会摘要
    正则表达式匹配IP地址
    SimpleDateFormat线程安全性测试与解决方案
    Java8 HashMap中哈希桶(table)数组的索引位置
    socket网络编程--基础应用篇
  • 原文地址:https://www.cnblogs.com/byluoluo/p/3525658.html
Copyright © 2011-2022 走看看