单调队列:(两个数组,一个存编号,一个存值)【可用于多重背包等动规问题的优化,滑动窗口等问题】
1.求出新值并入队,储存编号;
2.维护队列,老且无用者出队;
3.可以先求值入队再维护,也可以先维护再求值入队;
4.依据题来确定队列的单调增减;
模板:
for( i ; 1 - n )
{
while(head<=tail&& 二元关系(que[tail].value , a[i]) ) tail--;
que[++tail].value = a[i]; que[tail].time = i;
while(head<=tail&& i-que[head].time <= 时间限制 ) head++;
}