单调队列模板

1 for(int i=1;i<=n;i++){
2     while(head<=tail&&q[head]<=i-k)head++;
3     while(head<=tail&&a[q[tail]]>=a[i])tail--;
4     q[++tail]=i;
5     if(i>=k)
6         cout<<a[q[head]]<<" ";
7 }

规定先维护head,head是来描述决策是否过时的变量,在此位置的变量处于极值,tail是来描述最后一位插入时应该放的位置,添加决策用tail,取决策使用head

posted @ 2018-08-26 16:25  saionjisekai  阅读(145)  评论(0编辑  收藏  举报