题目大意:n个高楼,每个楼最高为mi,要求,第i个楼左边和右边不能有同时比它高的楼.让你求最在n个楼总和最高的情况下,每个楼的高度. 题解:用单调栈来做,n个楼的高度要么是单调递减,要么是单调递增,要么就是先曾后减,就这3种情况,其他的不可能. 维护一个单调非递减的栈,并且维护一个数组ans[],第i个位置,维护的是i左边的所有楼的最大高度和. 当新元素比栈顶元素大时或者直接ans[i]=m[i]+ans[i-1].当新元素比栈顶元素小时,一直出栈,直到栈为空(ans[i]=arr[i]*i),…