先看看求某个数左边第一个大于它的数?设 \(R_i\) 表示 \(i\) 右边第一个大于它的数的位置减一。那么对于 \(i\),实际上要求的就是满足 \([i,R_i]\subseteq [j,R_j],j<i\) 成立的最大的 \(j\)。画出图来长这个样子:
对于某个 \(i\) 来讲,左边所有的 \(j\) 都有考虑,栈顶的就是满足条件且 \(j\) 最大的那个。