单调栈和单调队列
其实我栈和队列学的不太好
这有点伤......
单调栈及单调队列是维护顺序排列(升序或降序)的一种数据结构
非常类似于DP中的最优状态保存和查询
因此可用单调队列维护DP
维护的手段就是如果满足单调性加入,不满足单调性退出
遍历时间O(n),但是查最值的开销就是O(1)
保证及时更新单调栈或单调队列数据即可
有的可以用单调队列优化成O(n)
求双最值的多跑几遍就行了
有二维的就嵌套就行了
有特殊性质的特判掉就行了
单调栈/队列本身构造不难,难的是如何构造以及以后的维护过程
比较好用的除了优化DP,还有预处理维护区间最值范围
见到最大/最小的数据结构问题考虑单调栈就对了
然后还有就是队列维护最优决策
包括单调队列优化,斜率优化,四边形不等式
还有就是nlogn的LIS也可以二分单调栈
不过最后一个我更倾向于std::set
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具