滑动窗口

[Toc]
#题外话

本来是不想写这个的,但是看见阿楚姐,一副灵魂出窍的模样还是写了这个

题意

中文不说了

思路

就说最大值了,小的和他差不多
首先我们发现,每一块的最大值,单独拿出来其实就是一个单调上升的序列,所以我们用队列存每一次的最大值即可

#include<iostream>
#include<cstdio>
using namespace std;
const int N =1000010;
int n , k;
int a[N] , q[N];
int main()
{
    cin >>n>>k;
    for(int i=0 ;i<n;i++)
    {
        cin>>a[i];
    }
    int hh =0,tt=-1 ;
    for(int i=0;i<n;i++){

        if(hh<=tt&&i-k+1>q[hh])hh++;
        while(hh<=tt&&a[q[tt]]>a[i])tt--;
        q[++tt] =i;
        if(i>=k-1)cout<<a[q[hh]]<<" ";
    }
    cout<<endl;

     hh =0,tt=-1 ;
    for(int i=0;i<n;i++){

        if(hh<=tt&&i-k+1>q[hh])hh++;
        while(hh<=tt&&a[q[tt]]<=a[i])tt--;
        q[++tt] =i;
        if(i>=k-1)cout<<a[q[hh]]<<" ";
    }
    cout<<endl;
}
全部评论

相关推荐

Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务