zoukankan      html  css  js  c++  java
  • 洛谷P1886--滑动窗口(单调队列模板)

    https://www.luogu.org/problemnew/show/P1886

    单调队列的操作上比普通队列多了可以从尾端出队

    单调队列保持队内元素单调递增/递减,以保证队首元素为最小/最大元素

    详细解释https://www.luogu.org/problemnew/solution/P1886

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    vector<int> a;
    vector<int> q;
    int n,k;
    void findMin(){
        int head=1,tail=0;
        for(int i=1;i<=n;i++){
            while(head<=tail&&q[head]+k<=i)
                head++;
            while(head<=tail&&a[q[tail]]>a[i])
                tail--;
            q[++tail]=i;
            if(i>=k)
                cout<<a[q[head]]<<' ';
        }
        cout<<endl;
    }
    void findMax(){
        int head=1,tail=0;
        for(int i=1;i<=n;i++){
            while(head<=tail&&q[head]+k<=i)
                head++;
            while(head<=tail&&a[q[tail]]<a[i])
                tail--;
            q[++tail]=i;
            if(i>=k)
                cout<<a[q[head]]<<' ';
        }
        cout<<endl;
    }
    int main(){
        cin>>n>>k;
        a.resize(n+1);
        q.resize(n+1);
        for(int i=1;i<=n;i++)
            cin>>a[i];
        findMin();
        findMax();
        return 0;
    }
  • 相关阅读:
    mysql_example
    windows 下 解决 go get 或 dep init 更新不了问题
    golang反射
    Windows下修改hosts并且让他立即生效
    Windows不重启就使环境变量修改生效
    swoole进程-2
    swoole进程
    swoole协程
    区间素数筛法
    AOJ
  • 原文地址:https://www.cnblogs.com/albert67/p/10449039.html
Copyright © 2011-2022 走看看