4113: 最大矩形的面积

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:6 解决:6

题目描述

编程实现:

工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤106),且每列砖的数量为Ki(1≤Ki≤104,相邻两列砖之间无缝隙),每块砖的长宽高都为1。

小蓝为了美化这面墙,需要在这面墙中找到一块面积最大的矩形用于涂鸦,那么请你帮助小蓝找出最大矩形,并输出其面积。

例如:N = 6,表示这面墙有6列,每列砖的数量依次为3、2、1、5、6、2,如下图:


图中虚线部分是一块面积最大的矩形,其面积为10。

输入

第一行输入一个正整数N(1≤N≤106),表示这面砖墙由几列砖组成。

第二行输入N个正整数Ki(1≤Ki≤104),表示每列砖的数量,正整数之间以一个空格隔开

输出

输出一个正整数,表示最大矩形的面积

样例输入 复制

6
3 2 1 5 6 2

样例输出 复制

10

提示

遍历所有砖堆,找出左右两侧第一个高度小于本砖堆的砖堆,就可以算出“高度与本砖堆一致的最大矩形面积”。全部遍历完即可找出最大面积。

n = int(input())
ls = list(map(int, input().split()))
ls.insert(0,0)  #最左侧增加1个高度为0的虚拟的砖堆,以便编程
ls.append(0)    #最右侧增加1个高度为0的虚拟的砖堆,以便编程
ans=0
for i in range(1,n+1):
    l=i-1
    r=i+1
    while (ls[l]>=ls[i]):
        l-=1
    while (ls[r]>=ls[i]):
        r+=1
    width=r-l-1  #宽度
    area=width*ls[i]  #高度与本砖堆一致的最大矩形面积
    ans=max(ans,area)
print(ans)