class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
largest = 0
stack = []
heights.append(0)
for i in range(len(heights)):
while len(stack) > 0 and heights[stack[-1]] >= heights[i]:
h = heights[stack.pop()]
sidx = stack[-1] if len(stack) > 0 else -1 #矩形左边界
largest = max(largest, h * (i-sidx-1))
stack.append(i)
return largest