本来今天打算主要练习一下线段树的,中午看了下线段树的基本操作,但对单调栈和单调队列还是不大放心

这次遇到了一个维护栈顶是最大值的单调栈

暑假日记 

暑假日记

如图,维护一个栈顶最大的栈一直到 4 都只有入栈操作,a[5] 想入栈时,a[2],a[3],a[4] 都要出栈

此时栈顶为 a[1], a[5] 准备入栈,此时可以进行的操作有 统计 sum[2~5]

即 sum[5]-sum[s.top()]

但在出栈过程中依然有,sum[4],sum[3~4],sum[2~4] 中不包括栈顶的求解过程

当时的栈顶分别为 4,3,2,代码实现为 :sum[5-1]-sum[s.top()]

之后的元素依次类推

 

单调栈和单调队列总感觉用起来和自己想到的总是反着的,自己觉得应该构造一个单调递增的,单答案要求构造一个单调递减的,其实通过这个题可以发现,无论栈顶最大也好最小也罢,都是起到一种隔离作用,假设 a[i] 将作为栈顶,那么当前的栈顶的性质就被 a[i] 包含了,之后无法取代 a[i] 的元素也全都与栈顶底下的元素无关

 

 

相关文章: