最大矩形面积

2年前 (2022) 程序员胖胖胖虎阿
148 0 0

posted on 2019-08-26 14:44:50

最大矩形面积

题目描述 给出一个柱形统计图,图中有n个项目,它的每个项目的宽度是1, 高度为$h_i$。 求这个柱形图中的最大面积的长方形。

最大矩形面积

输入格式

从标准输入读入数据。

输入共两行。

第一行一个正整数 n($\leq 10^6$)。

第二行 n 个正整数,第 i 个数为 $h_i$($\leq10^6$) ,两个数之间用空格隔开。

输出格式

输出到标准输出。

输出一行,一个数,表示答案。

样例 1 输入

7

2 1 4 5 1 3 3

样例 1 输出

8


标程如下

#include <iostream>
#include <cmath>
using namespace std;
int n;
struct node {//搞个结构体储存h高度l长度
    int h, l;
} s[1000005];
int h, ans, top, sum;
//top栈顶元素,ans矩形面积,sum长度累加,h输入当前矩形高度
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> h;
        sum = 0;//更新当前长度为0
        while (top && s[top].h > h) {
            ans = max(s[top].h * (s[top].l + sum), ans);
            sum += s[top].l;
            top--;
        }
/*如果加入的h不如栈顶h大的话,从栈顶开始往左算最大面积,

*/
        top++;
        s[top].h = h;
        s[top].l = sum + 1;
    }
    sum = 0;
    while (top) {
        ans = max(ans, s[top].h * (s[top].l + sum));
        top--;
    }
    cout << ans;
    return 0;
}

版权声明:程序员胖胖胖虎阿 发表于 2022年10月5日 下午5:08。
转载请注明:最大矩形面积 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...