思想是将序列上的所有数放入栈中延后处理,使得栈中呈现出单调递增性。每个栈里的元素维护一个 $w$ 表示在它自己和前面有多少的元素小于等于它,当有一个新的元素添加进来的时候,如果比当前栈顶还大,那么直接放入栈,显然 $w = 1$ ;否则不断从栈找到之前的,将这些 $w$ 累加起来就是以这个元素为最小值的区间长度,同时累加的 $w$ 加上自己就是这个元素的 $w$。
查看代码
1 |
|
\begin {array}{c} \mathfrak {One Problem Is Difficult} \\\\ \mathfrak {Because You Don't Know} \\\\ \mathfrak {Why It Is Diffucult} \end {array}
思想是将序列上的所有数放入栈中延后处理,使得栈中呈现出单调递增性。每个栈里的元素维护一个 $w$ 表示在它自己和前面有多少的元素小于等于它,当有一个新的元素添加进来的时候,如果比当前栈顶还大,那么直接放入栈,显然 $w = 1$ ;否则不断从栈找到之前的,将这些 $w$ 累加起来就是以这个元素为最小值的区间长度,同时累加的 $w$ 加上自己就是这个元素的 $w$。
1 | #include <cstdio> |