【动态规划10】单调队列总结(坑了

https://wenku.baidu.com/view/ef259400bed5b9f3f90f1c3a.html

先丢一个感觉超好用论文。
在之前我也写过两道用单调队列优化DP的题解,今天偶然看到了这样一个论文,大概就题目与用法之间写一个总结。
单调队列就是维护一个队列,满足队列里的元素的值与指针都是单调的。

一、维护区间的最大值/最小值

假设这个数列为a[],区间的大小为m。
假如维护最大值那么就维护一个单调递减队列,每次向右找到一个新的位置i时,假如队尾的元素比a[i]小的话,就将队尾元素出队,直到满足递减性便将a[i]入队。同时对于队首,假如它的指针小于i-m+1,那么显然这个数字对于我们所求的区间是无关的,也将它出队。
结束之后,此时显然队首的元素就是所求区间中的最大值,因为这个队列是单调递减的。
对于最小值亦然。

那么,为什么这样子维护队列,就能找到区间的最大值/最小值呢?
对于最大值,我们思考这么一个问题,我们所求的最大值的区间是从i-m+1~i,那我们假设目前的队尾元素是a[j],而且a[j] < < <script type="math/tex" id="MathJax-Element-1"><</script>a[j+1],那么对于j+1之后区间而言,这些区间必然如果包含j那么一定包含j+1,然而a[j+1] > > <script type="math/tex" id="MathJax-Element-2">></script>a[j],对于求最大值而言,显然a[j]相当于不存在了。

http://blog.csdn.net/flanoc/article/details/72860395

不要脸地丢个自己写的(代码超丑的)题解。
维护区间最大值和最小值然后瞎搞就行。

二、同时维护多种单调性

其实也没说的那么玄乎,大概就是a[][2],在a[][0]相同时,优先考虑a[][1]的大小。
还是不要脸地扔个题解。

http://blog.csdn.net/flanoc/article/details/72870236

论文中的题目
http://blog.csdn.net/Flanoc/article/details/72918520
待续(坑了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值