单调队列
板子
求区间最值
while(!q1.empty() && q1.back().data>=a[i])q1.pop_back();
//队列中的元素单调递增,如果当前元素比队尾元素大就无法保证单调性,应该弹出
q1.push_back((element){a[i],i});//插入元素
}
for(int i=k;i<=n;++i){
while(!q1.empty() && q1.back().data>=a[i])q1.pop_back();
q1.push_back((element){a[i],i});
while(!q1.empty() && i-q1.front().pos+1>k)q1.pop_front();
//弹出过期元素
printf("%d ",q1.front());
}
例题 :滑动窗口,理想正方形
维护某个单调关系
例题:广告印刷,look up,广告印刷

浙公网安备 33010602011771号