zoukankan      html  css  js  c++  java
  • [POJ2823]Sliding Window 滑动窗口(单调队列)

    题意

    刚学单调队列的时候做过

    现在重新做一次

    一个很经典的题目

    现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。

    思路

    单调队列

    一个递增

    一个递减

    代码

    //author: sysky
    #include<cstdio>
    #define N 1000006
    #define INF 0X3FFFFFFF
    using namespace std;
    int n,k;
    int mina[N],maxa[N];
    int minb[N],maxb[N];
    int maxl=0,maxr=1,ansmax[N];
    int minl=0,minr=1,ansmin[N];
    int main()
    {
        int i;
        scanf("%d%d",&n,&k);
        maxa[0]=INF;
        mina[0]=-INF;
        for(int i=1,a;i<=n;i++)
        {
            scanf("%d",&a);
            while(maxb[maxl]<=i-k && maxl<maxr) ++maxl;
            while(minb[minl]<=i-k && minl<minr) ++minl;
            while(maxa[maxr-1]<=a && maxl<maxr) --maxr;
            while(mina[minr-1]>=a && minl<minr) --minr;
            maxa[maxr]=mina[minr]=a;
            maxb[maxr++]=minb[minr++]=i;
            ansmax[i]=maxa[maxl];
            ansmin[i]=mina[minl];
        }
        for(int i=k;i<=n;i++) printf("%d ",ansmin[i]);
        puts("");
        for(int i=k;i<=n;i++) printf("%d ",ansmax[i]);
        return 0;
    }

    END.

  • 相关阅读:
    SE知识整理——泛型
    IDEA 运行 SpringMVC 项目分发控制器出现404解决方案。
    快速幂/欧拉降幂
    Leetcode(双指针专题)
    剑指offer
    ns3参考
    网络知识1:最后一公里/WiMax / 4G
    备份2
    shell入门
    ns3_gdb:协议里的函数是怎么被调用的
  • 原文地址:https://www.cnblogs.com/lincold/p/10225767.html
Copyright © 2011-2022 走看看