单调栈

母题

https://www.luogu.com.cn/problem/P5788

找每个数前面第一个大于它的。

基本思想:如果一个数出现的晚又大,那么它前面的数如果小者可以删去。

本题倒着做。

https://www.luogu.com.cn/record/164679827

  1. https://www.acwing.com/activity/content/code/content/5712296/(这个变式比较重要,有相当一部分都从这延伸)

  2. https://www.cnblogs.com/wscqwq/p/17579243.html对于每个位置求向上延伸有多少,然后枚举以这一行作为基底,就跟1.一样

  3. https://www.cnblogs.com/wscqwq/p/17579176.html,由于要求最小值,又有两维,那么我们需要通过枚举上下界压掉一维,然后做1.(因为求最小值,相当于就是压低了高度,相当于1.,只是要乘以前缀和)。

  4. https://www.cnblogs.com/wscqwq/p/17579257.html,3.的另一种解法,关注到了 a 的范围,枚举把小于的视为0,大于等于的视为1,然后做2.。

  5. https://www.cnblogs.com/wscqwq/p/17579696.html,与2一样,由于是正方形所以长 × 宽时改一下。

  6. https://www.cnblogs.com/wscqwq/p/17579821.html,与6一样,需要特判水平也会不合法(因为01交错)。

  7. https://www.cnblogs.com/wscqwq/p/17579832.html,7的加强版,同时求矩形。

  8. https://www.cnblogs.com/wscqwq/p/17488724.html,很特殊的单调栈,求字典序最小,所以可能与单调栈的优先级方面有关,研究发现如果后面的数小,而且前面的数有替代品(预处理一个数组)就可以弹栈(与普通单调栈很像)。

特性

发现2.~7.都是那种二维的问题,由于单调栈只能处理一维的问题,所以遇到两维,要么通过前缀和优化,要么使用枚举去掉一维,还可以二者一起使用(如4.)。

还有8.这种要求什么字典序最小的,只要是求最值,并且与位置有关(因为这道题是找排列的字典序最小,元素固定,位置决定成败)。

以后看到可能要单调栈的问题,考虑前缀和优化或枚举降维打击。

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/18290718

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起