zoukankan      html  css  js  c++  java
  • 洛谷 P1886 滑动窗口 /【模板】单调队列

    纯板子题,入队时保证单调性,即单调栈,出队保证题目条件,本题即窗口长度k,在入队出队时都可以维护信息

    const int maxm = 1e6+5;
    
    int buf[maxm], maxq[maxm], minq[maxm], ans1[maxm], ans2[maxm];
    
    int main() {
        ios::sync_with_stdio(false), cin.tie(0);
        int n, k, l1 = 0, r1 = -1, l2 = 0, r2 = -1;
        cin >> n >> k;
        for(int i = 0; i < n; ++i)
            cin >> buf[i];
        for(int i = 0; i < n; ++i) {
            while(l1 <= r1 && minq[l1] <= i-k) l1++;
            while(l2 <= r2 && maxq[l2] <= i-k) l2++;
            while(l1 <= r1 && buf[minq[r1]] >= buf[i]) r1--;
            minq[++r1] = i;
            while(l2 <= r2 && buf[maxq[r2]] <= buf[i]) r2--;
            maxq[++r2] = i;
            if(i >= k-1) ans1[i] = buf[minq[l1]], ans2[i] = buf[maxq[l2]];
        }
        for(int i = k-1; i < n; ++i) {
            if(i!=k-1) cout << " ";
            cout << ans1[i];
        }
        cout << "
    ";
        for(int i = k-1; i < n; ++i) {
            if(i!=k-1) cout << " ";
            cout << ans2[i];
        }
        cout << "
    ";
    
        return 0;
    }
    View Code
  • 相关阅读:
    利用角色简化playbook
    lamp
    playbook部署lamp
    ansible-playbook配置不同系统yum源
    66. 加一
    628. 三个数的最大乘积
    977. 有序数组的平方
    383. 赎金信
    203. 移除链表元素
    83. 删除排序链表中的重复元素
  • 原文地址:https://www.cnblogs.com/GRedComeT/p/12233285.html
Copyright © 2011-2022 走看看