• 洛谷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;
    }
  • 相关阅读:
    计蒜客38228 Max answer 单调栈 + 线段树
    Codeforces 103D Time to Raid Cowavans 分块
    Poj 2352 Stars
    HDU 6203 ping ping ping LCA + 贪心
    redis——数据库发展
    数据库拆分
    java基础算法
    docker部署redis集群
    docker网络
    DockerFile
  • 原文地址:https://www.cnblogs.com/albert67/p/10449039.html
Copyright © 2020-2023  润新知