题解 | #选区间#

选区间

https://www.nowcoder.com/practice/70cd4744404a4fbcbffe69e53e1f964c

from sys import prefix
from itertools import accumulate
N = int(input())
arr = list(map(int, input().split())) + [0]

res = 0
stack_index = []
prefix_sum = [0]
for i , v in enumerate(arr):
    while stack_index and arr[stack_index[-1]] > v:
        idx = stack_index.pop()
        mmin = arr[idx]
        #积累的就是prefix_sum[i]
        #TODO 弹出的prefix_sum[i] 如果更小
        accumulate = prefix_sum[i] if not stack_index else prefix_sum[i] - prefix_sum[stack_index[-1] + 1]
        res = max(res,mmin * accumulate)
    
    stack_index.append(i)
    prefix_sum.append(prefix_sum[-1] + v)
print(res)

全部评论

相关推荐

牛客501015981号:前面志愿结束了,在大池子里面被其他部门捞了
点赞 评论 收藏
分享
04-06 11:24
已编辑
太原学院 C++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务