ans, n = 0, len(maxHeight)
for i, x in enumerate(maxHeight):
y = t = x
# t 是高度和,y 是 min_v
for j in range(i - 1, -1, -1):
y = min(y, maxHeight[j])
t += y
y = x
for j in range(i + 1, n):
y = min(y, maxHeight[j])
t += y
ans = max(ans, t)
return ans
class Solution:
def maximumSumOfHeights(self, maxHeight: List[int]) -> int:
n = len(maxHeight)
f = [-1] * n # f[i] 表示 i 作为峰顶左侧的高度和
g = [-1] * n # g[i] 表示 -i-1 作为峰顶右侧的高度和
def gao(f):
st = []
for i in range(len(maxHeight)):
while st and maxHeight[i] <= maxHeight[st[-1]]:
st.pop()
if st:
f[i] = (i - st[-1]) * maxHeight[i] + f[st[-1]]
else:
f[i] = maxHeight[i] * (i + 1)
st.append(i)
gao(f)
maxHeight = maxHeight[::-1]
gao(g)
maxHeight = maxHeight[::-1]
ans = 0
for i in range(len(maxHeight)):
ans = max(ans, f[i] + g[-i-1] - maxHeight[i])
return ans