【单调队列优化dp】

参考洛谷p1440求m区间内的最小值、洛谷p1725琪露诺

1.单调队列:p1440求m区间内的最小值(滑动窗口)

对于一组数据,多次求一个区间内的最值,可以用一个双端队列deque维护,

struct node
{
    int val;//要比较的值
    int pos;//这个值在这组数据中的位置
}v[N];
min_que[0] = 0;
int head = 1,tail = 0;
for(int i = 1; i < n; i++){
    while((head <= tail)&&(v[tail].val >= a[i - 1]))
               tail--;//tail移动到从尾端数第一个小于该数的位置
    v[++tail].val = a[i - 1];
    v[tail].pos = i - 1;//将该数据放到队列中
    while((head <= tail)&&(v[head].pos < i - m))
                head++;//将不在这个区间内的头部去掉,
    //中间的暂时不用去掉,因为只会用到头部
    min_que[i] = v[head].val;
}

2.单调队列优化dp:

有一种dp要寻找从 i 到 j 中最大的 dp[k] ,此时可以利用单调队列来优化

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 找了好半天也没找到可以注册&&提交本题得OJ,所以不能保证AC。 描述烽火台又称烽燧,是重要的防御设施,一般建在险...
    zjy_hala阅读 1,009评论 0 0
  • 单调栈:进栈元素单调递增(减)的栈,如果碰到比栈顶元素大的元素就进栈,否则不断把栈顶元素弹出直到栈顶元素小于等于要...
    素理想阅读 395评论 0 0
  • 简介 区间dp,顾名思义就是在一段区间上进行动态规划。对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是...
    Steven1997阅读 6,562评论 0 2
  • 前言 转眼已经到5月,可是我还没订17年的计划,真是悲伤的故事。今年还是想花点时间,玩玩题目。题目不会太简单,也不...
    落影loyinglin阅读 897评论 0 3
  • 少不读水浒、老不读三国、拿这句话当作一个典故、这似乎是我走在了人生的十字路口、有点不知所错、都讲老话一直流传下来都...
    陈琳琳阅读 118评论 0 1