直方图中的最大矩形
时限: 1000MS 内存限制: 65536K
描述
直方图是由在公共基线对齐的一系列矩形组成的多边形。矩形的宽度相等,但高度可以不同。例如,左图显示了由高度为2、1、4、5、1、1、3、3的矩形组成的直方图,以矩形的宽度为单位:1
通常,直方图用于表示离散分布,例如,文本中字符的频率。注意,矩形的顺序,即它们的高度,很重要。计算直方图中与公共基准线对齐的最大矩形的面积。右图显示了所描绘的直方图的最大对齐矩形。
输入值
输入包含几个测试用例。每个测试用例都描述一个直方图,并以整数n开头,表示它所组成的矩形数。您可以假设1 <= n <= 100000。然后跟随n个整数h 1,…,h n,其中0 <= h i <= 1000000000。这些数字表示从左到右顺序的直方图矩形的高度。每个矩形的宽度为1。在最后一个测试用例的输入之后为零。
输出量
对于单行上的每个测试用例输出,指定直方图中最大矩形的面积。请记住,此矩形必须与公共基线对齐。
样本输入
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
样本输出
8
4000
分析:
建立一个单调递增栈 所有元素都要进栈出栈一次 每次更新面积
两个数组 一个是宽 一个是高 用cnt记录总长 计算面积
最后取最大值就完了 注意开long long
CODE:
#include<iostream>