zoukankan      html  css  js  c++  java
  • luoguP1886 滑动窗口(单调队列模板题)

    题目链接:https://www.luogu.org/problem/P1886#submit

    题意:给定n个数,求大小为k的滑动窗口中最小值和最大值。

    思路:单调队列模板题。

    AC代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1e6+5;
    int n,k,head,tail;
    int a[maxn],q[maxn],p[maxn];
    
    int main(){
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;++i)
            scanf("%d",&a[i]);
        head=1,tail=0;
        for(int i=1;i<=n;++i){
            while(tail>=head&&q[tail]>=a[i])
                --tail;
            q[++tail]=a[i];
            p[tail]=i;
            while(p[head]<=i-k)
                ++head;
            if(i>=k) printf("%d ",q[head]);
        }
        printf("
    ");
        head=1,tail=0;
        for(int i=1;i<=n;++i){
            while(tail>=head&&q[tail]<=a[i])
                --tail;
            q[++tail]=a[i];
            p[tail]=i;
            while(p[head]<=i-k)
                ++head;
            if(i>=k) printf("%d ",q[head]);
        }
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    清北学堂(2019 5 3) part 6
    清北学堂(2019 5 2) part 5
    清北学堂(2019 5 1) part 4
    dijkstra
    清北学堂(2019 4 30 ) part 3
    2020/5/1
    2020/4/30
    2020/4/29
    HSV模型
    2020/4/28
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/11268652.html
Copyright © 2011-2022 走看看