思路: 转化成对于某一位置为最小值求向两边最远>=他的位置,用单调栈就能轻易完成. 那么ans=(left+right)*h[i]; 维护单调递增还是递减呢? 我们能很快反应到,一旦碰到一个比他小的元素,那么之前的那个比他大的就要结束了. ok,大致了解到碰到比他小的元素,那么比他大的呢? 也简单呀,对于比他大的元素,左端点已经找到了呀! 那么基于双方考虑,是不是就是维护单调递增栈呢? 如果碰到比top值大的,那么就压栈,并且左端点为i-1: 如果遇到比top值小的,要把栈里面值比他大的全部输出…