ここでは、「プログラミングコンテストチャレンジブック(第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)