• POJ2823-Sliding Window


    给定两个数n和k,接下来给出n个数的数列。每次维护一个长度为k的窗口,求出这个范围的最大值和最小值。每次向右移动一个单位。

    考虑如何得出一个区间的最大值,每次增加一个数,如果这个数比当前的最大值小,如何是可以不用维护的。如果比当前值大,那么就要考虑。但是当这个最大值在最左边的时候,它下一次就不能在这个区间了。所以我们要维护的是一个值可以存在的最左的位置。即位置i的生存期最多是i+k,但如果中间出现比它大的数,那么就没必要维护这个数了,可以用出现的数代替它。因为它总是比维护当前的数更优,无论是数值上还是位置上。

    也就是说,我们要维护一个递减的数列,可以用单调队列实现做到O(n)的复杂度。

    最小值同理,代码如下:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    #include <algorithm>
    using namespace std;
    
    int n,k,v[2333333],q[23333333];
    int main() {
        while(~scanf("%d%d",&n,&k)){
            for(int i=1;i<=n;++i)
                scanf("%d",&v[i]);
            
            int l=1,r=1;
            q[1]=0;
            v[0]=1e9;
            for(int i=1;i<=n+1;++i){
                while(l<=r&&q[l]+k<i)
                    ++l;
                if(i<=k)
                    ;
                else printf("%d ",v[q[l]]);
                while(l<=r&&v[q[r]]>=v[i])
                    --r;
                q[++r]=i;
            }
            puts("");
            //printf("%d
    ",v[q[l]]);
            l=1,r=1;
            q[1]=0;
            v[0]=-1e9;
            for(int i=1;i<=n+1;++i){
                while(l<=r&&q[l]+k<i)
                    ++l;
                /*
                for(int j=l;j<=r;++j)
                printf("%d ",v[q[j]]);
                puts("");
                */
                if(i<=k)
                    ;
                else 
                    printf("%d ",v[q[l]]);
                while(l<=r&&v[q[r]]<=v[i])
                    --r;
                q[++r]=i;
            }
            puts("");
            //printf("%d
    ",v[q[l]]);
        }
        return 0;
    }
  • 相关阅读:
    关于JavaWeb项目汉字乱码问题
    使用pipenv
    python使用imap-tools模块下载邮件中的附件
    Python新增功能, 函数的参数类型提示.
    centos83+django3.1+ASGI+nginx部署.
    python3.9 pip本身的升级
    windows+django3.1+ASGI+nginx部署
    k8s 单节点开发环境用hostPath配置mysql的持久化存储
    Rust的设计中为什么要区分不可变变量和常量?
    Vscode + Python + Django开发环境常见问题
  • 原文地址:https://www.cnblogs.com/-Chamgin/p/8969395.html
Copyright © 2020-2023  润新知