单调队列学习 PKU2823

原创 2010年06月06日 14:17:00

 一直以为单调队列是优先队列,2了 — —||||

本题利用单调队列,单调队列分为最大列和最小列,也就是分别单调递减和递增。下面以最大列为例说明:

我们要保证队列中各个元素大小单调递减(不是不升),各个元素的下标单调递增。这样才能保证队首是最大值,而且更新时队首永远是最大值。因此,需要改造一下队列。让它变成能在两头删除,在队尾插入。

为了保证单调性,每次插入的时候,先判断队尾元素,若不大于待插入的元素(注意是最大队),删除(这样才能保证插入的数小于原来尾部的数,保证递减)。不断删除直到找到大于待插入的元素的队尾或者队空。删除的时候,判断队首,若队首元素下标小于规模为k的单调队列的当前左边界(右边界i是递增的,当右边界为i时,左边界就是i-k,若当前队首的元素--也就是最优解--的下标超出了左边界,说明在原数组中这个最优解已经不在当前被圈的范围内,果断舍弃),这样一直舍弃,直到队首的元素下标进入当前被圈范围。队首就是最优解。最小列理同与此。
单调队列建议用结构体数组实现,数据分别为队列中元素的值和它在原数组中的下标(位置):

单调队列的学习 pku2823

故名思异,一个单调的队列,求定长区间(整个区间移动)内的最大值或最小值?       不妨设区间的定长为k,求最小值。扫描一遍,如果现在入队的数(从后面入队),比前面入队的数要小的话,那么将前面的数出...
  • ahero_happy
  • ahero_happy
  • 2011-07-18 22:14:59
  • 384

PKU2823 单调队列

Sliding WindowTime Limit: 12000MS Memory Limit: 65536KTotal Submissions: 14169 Accepted: 3953Case Ti...
  • ACM_DavidCN
  • ACM_DavidCN
  • 2010-09-16 01:54:00
  • 763

多重背包单调队列优化问题.ppt

  • 2018年04月07日 12:24
  • 130KB
  • 下载

[PKU 2823]Sliding Windows(单调队列版)

【题目大意】:见上篇日志 【题目分析】:经过对该题的重新分析,得出如下算法。开一个单调队列,然后记录单调队列中元素对应原序列中的位置以及原序列中的数对应单调队列中的位置,如果不在队列中或改数已过期,那...
  • Skyprophet
  • Skyprophet
  • 2009-09-24 14:01:00
  • 801

poj 2823 单调队列入门题(内含手写队列的学习和模板)

题目描述:    有N个数,每次从左到右选取M个数,第一行选取每个区间中的最小值输出,第二行选取最大值并输出。   解题思路:    看单调队列的时候推荐了这个题,所以自然就是...
  • cokomowang
  • cokomowang
  • 2014-08-18 16:15:41
  • 942

用双端队列实现单调队列

单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。 以单调不减队列为例:队列内的元素(e1,e2,e3...en)存在(e1...
  • xiaosshhaa
  • xiaosshhaa
  • 2016-10-30 21:43:00
  • 293

单调队列或单调栈的学习及认识

单调队列或单调栈的学习及认识。。。顾名思义,数据是具有某方面的单调性质的(单增或单减等)。单调队列一般是用于优化动态规划方面问题的一种特殊数据结构,且多数情况是与定长连续子区间问题相关联。一、数据结构...
  • KIJamesQi
  • KIJamesQi
  • 2016-05-19 12:27:49
  • 746

C++单调队列入门

单调队列入门 -ZZZ 单调是一种思想,当我们解决问题的时候发现有许多冗杂无用的状态时,我们可以采用单调思想,用单调队列或类似于单调队列的方法去除冗杂状态,保存我们想要的状态,...
  • CABI_ZGX
  • CABI_ZGX
  • 2016-09-29 13:51:53
  • 5446

单调队列+STL deque

单调队列=双端队列! 我们从最简单的问题开始: 给定一个长度为N的整数数列a(i),i=0,1,...,N-1和窗长度k. 要求:       f(i) = max{a(i-k+1),a(i-...
  • leolin_
  • leolin_
  • 2011-08-06 15:14:56
  • 1360
收藏助手
不良信息举报
您举报文章:单调队列学习 PKU2823
举报原因:
原因补充:

(最多只允许输入30个字)