单调队列学习笔记

其实很久之前就该学单调队列了 但是一直不会又懒得学 然后就一直咕咕咕了

单调队列一般处理区间最值的问题
比如滑动区间
同时可以扩展到另外一系列dp的优化 比如dp[i] 可以由dp[i-k] 到dp[i] 转移过来 直接跑是(n^2)的 但是单调队列优化之后就会降到O(n)的效率



思想是
维护一个队列
每次保证队首是最优选择
在加入一个新决策时
通过新决策把一些不可能在成为队首的决策去掉
然后维护一下队列单调性
将新决策加入队尾
每次维护之后取队首就好了
复杂度 : 一个head指针 一个tail指针
最坏情况下也不过是head tail从头扫一遍 也就是O(n)
常用于优化dp



P1886 滑动窗口 /【模板】单调队列
很裸的单调队列题 每次维护的时候就正常去掉不符合条件的队首和队尾 取队首就好了



P2300 合并神犇
(我也不知道为啥(n^2)就碾过十万了)
大概随便想想就能推出来(n^2)的转移柿子
考虑优化就行了
发现答案其实是满足单调的 而且每次只关心最优化决策
所以用单调队列维护

如初见 与初见
原文地址:https://www.cnblogs.com/HISKrrr/p/13791451.html