用单调栈解决经典区间最值问题
- 对于“给定一个数组和若干询问,每次询问给出区间,求区间的最值”这种问题,解法多种多样,可以使用稀疏表、莫队、线段树、树状数组等算法解决。这里提供一个新的思路:单调栈。
- 写法很简单,但是思想很妙妙。将查询离线,每次将 [stk[top] + 1, r] 的下标插入单调栈中,之后二分得到大于等于 l 的第一个下标,其对应的数字就是这个 [l, r] 区间中的最值。结合之前一道我自己用线段树解的单调栈问题,我们似乎可以发现两个算法之间互相存在某种可替代性。
- 感兴趣的同学可以自行使用洛谷 P3865 进行练习。
浙公网安备 33010602011771号