塔子哥定义一个数组的权值为这个数组的最小值乘上数组的长度。 塔子哥现在有一个数组,他想知道这个数组的所有连续子数组的权值之和。
对于一个值aj,当ak<aj,aj<ai(k<j,j<i)时,aj对k~i间的数组都是有贡献的。
通俗的说,对于数组[2,9,5,8,3],5仅是2和3之间的数组的最小值,其所需要贡献的连续子数组为[9,5],[5],[5,8],[9,5,8]。
也就是说,对于aj,我们需要找到它左右两边的第一个更小的值(对于5来说是2和3)。这符合单调递增栈的特点。所以我们需要维护一个单调递增栈。