单调队列(滑动窗口)

Posted 20203246

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调队列(滑动窗口)相关的知识,希望对你有一定的参考价值。

#include <iostream>
using namespace std;
using ll = long long;
const int maxn=1e6+10;
int n,k,a[maxn],q[maxn];
int main(){
    ios::sync_with_stdio(false);
    cin>>n>>k;
    for(int i=0;i<n;i++)cin>>a[i];
    int l=0,r=-1;
    for(int i=0;i<n;i++){
        while(l<=r&&i-k+1>q[l])l++;
        while(l<=r&&a[q[r]]>=a[i])r--;
        q[++r]=i;
        if(i>=k-1)cout<<a[q[l]]<<" ";
    }
    cout<<endl;
    l=0,r=-1;
    for(int i=0;i<n;i++){
        while(l<=r&&i-k+1>q[l])l++;
        while(l<=r&&a[q[r]]<=a[i])r--;
        q[++r]=i;
        if(i>=k-1)cout<<a[q[l]]<<" ";
    }
}

  

以上是关于单调队列(滑动窗口)的主要内容,如果未能解决你的问题,请参考以下文章

滑动窗口(单调队列) C++版 Python版本

单调队列(滑动窗口)

单调队列--滑动窗口

滑动窗口

滑动窗口/模板单调队列 题解

ybtoj 单调队列课堂过关luogu P1886例题1滑动窗口