ここでは、「プログラミングコンテストチャレンジブック(第2版)」(通称:蟻本) P298で紹介されている、「Largest Rectangle in a Histogram」を python3 で記述しています。

今回は、そのままではコーディングしにくかったため、多少の変更をしています。

# 入力
n = 7
H = [2, 1, 4, 5, 1, 3, 3]


def solve():
    stack = [] # スタック
    maxArea = 0 #答え
    # Hを全探索
    for index, height in enumerate(H):
        start = index
        #低いものがきた場合
        while stack and stack[-1][1] > height:
            i, h = stack.pop()
            #面積を計算
            maxArea = max(maxArea, (index - i) * h)
            start = i
        stack.append((start, height))
        #print(stack, maxArea)
    # スタック内に残ったものの面積を計算
    for index, height in stack:
        maxArea = max(maxArea, (len(H) - index) * height)
        
    return maxArea

maxArea = solve()
print(maxArea)