单调栈

普及组的时候没学会。

单调栈

作用

\(O(n)\) 求解一个数组中离某个数最近(左/右)的比它大/小的数。

实现

比如求解一个数右边最近的比它小的。

考虑如何维护栈。

遍历数组 \(a_i=x\)

  • 若栈顶元素 \(t\ge x\) ,则不断弹出。弹出的元素不用重新入栈,因为不可能再作为前面的答案。
  • 若栈顶元素 \(t<x\),则此时这个栈顶元素即为答案。

为什么用栈?因为要求最近,最后一个入栈的(即栈顶)就是答案。

posted @ 2024-12-19 15:42  _E_M_T  阅读(12)  评论(0)    收藏  举报