单调队列
1.一个可以从队头、队尾出队的队列。队列里的值具有单调性。
\text{ \ \ }
例题1 \text{\ } P1886 滑动窗口
长度为n的序列
求所有长度为m的区间中的 权值和最大的区间 的权值。
某些题中具有的性质:
2.区间动态,固定住r端点,离r远的非极值果断放弃。
3.队头出的为脱离这个区间,队尾出的表示他绝对不可能是当前的极值(例如2.)
\text{ \ \ }
\text{ \ \ }
\text{ \ \ }
例题2 \text{ \ \ } P1725 琪露诺
长度为n的序列, i i i在区间 [ i + l , i + r ] [i+l ,i+r] [i+l,i+r]中任选一点跳跃,累计a[i],从0跳到n,求权值和最大
题解:转换一下, i i i能从区间 [ i − l , i − r ] [i-l,i-r] [i−l,i−r]转移过来,所以单调队列维护区间里 d [ i ] d[i] d[i]的最大值。所以0到i的最大值 d [ i ] d[i] d[i]为
\text{ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ } d [ i ] = m a x ( ∑ j = i − l i − r d [ j ] ) + a [ i ] d[i]=max(\sum_{j=i-l}^{i-r} d[j])+a[i] d[i]=max(∑j=i−li−rd[j])+a[i]
也可以用优先队列维护前缀最大值,共同的max一定没用,且最多被踢出一次。
============================================================
尺取法
例题1 \text{ \ \ } P1638 逛画展
长度为n的序列
求最短区间包含1~m的所有数字
输出区间左右端点
题解:(尺取法 暴力左右端点挪移判可行、类似选择客栈的记录每种画的最后位置)
\text{ \ \ }
\text{ \ \ }
例题2 \text{ \ \ } poj2566 Bound Found
给你n,k给你n个可正可负数的数列,然后给你k次询问,让你求出在序列中一段连续的序列和的绝对值最接近询问值t,然后输出最接近的数,以及区间范围