首页 > 其他 > 详细

单调队列(滑动窗口)

时间:2021-05-19 13:03:07      阅读:17      评论:0      收藏:0      [点我收藏+]
#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]]<<" ";
    }
}

  

单调队列(滑动窗口)

原文:https://www.cnblogs.com/qq1415584788/p/14784472.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!