单调队列
Dale_zero
从零开始吧!
展开
-
C++单调队列详解
单调队列到底是什么呢?简单地按照字面意思来说,单调队列是一种队列(踢飞)但是这种队列和普通的队列有着很大的区别,怎么说呢:它的队首和普通的队列一样,只能删除元素。而它的队尾既可以添加元素也可以删除元素。通常来说也可以叫做输入受限的双端队列(栈)。单调队列是做什么用的呢?简单来说就是用来维护一段区间内的单调上升/下降性质,导出性质就是也可以用来维护一个区间内的最值。我们先来看一道例题:poj 282...原创 2018-03-12 17:58:02 · 5801 阅读 · 0 评论 -
hdu 6444 Neko's loop 单调队列+暴力处理循环节
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6444先用O(n)暴力处理出每个循环节存到数组中,同时维护数组的和,再对每一个循环节作如下处理。如果循环节的和>0,则最后的答案要加上sum*((m%len)-1)。再用单调队列处理m%len+len长度的区间长度为m的前缀和最小值。在此过程中不断更新以i为结尾的最大连续子区间和。最后更新...原创 2018-08-27 00:39:36 · 515 阅读 · 0 评论 -
hdu 5470 Typewriter 后缀自动机+单调队列优化DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5470这道题是用的是后缀自动机 + 单调队列优化DP。正常考虑DP的话,暴力DP需要O(n^2)的复杂度,不可行。这道题用单调队列优化DP可以到O(n)的复杂度。用dp【i】表示写出前i个字符需要的cost。则求dp【i】的时候有两种转移情况①:dp【i-1】+cost【s【i】】。...原创 2018-10-06 15:17:10 · 388 阅读 · 0 评论