• 单调队列


    单调队列

    https://ac.nowcoder.com/acm/problem/50528

    #include <cstdio>
    using namespace std;
    const int maxn= 1e6 + 4;
    
    int a[maxn], dq[maxn];
    
    int main()
    {
        int n, k;
        scanf("%d %d", &n, &k);
        for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
        int l = 0, r = 1;
        dq[0] = 1;
        if(k == 1) printf("%d ", a[1]);
        for(int i = 2; i <= n; ++i)
        {
            if(i - dq[l] >= k && l < r) ++l;
            while(r > l && a[dq[r - 1]] >= a[i]) --r;
            dq[r++] = i;
            if(i >= k) printf("%d ", a[dq[l]]);
        }
        printf("
    ");
    
        l = 0, r = 1;
        dq[0] = 1;
        if(k == 1) printf("%d ", a[1]);
        for(int i = 2; i <= n; ++i)
        {
            if(i - dq[l] >= k && l < r) ++l;
            while(r > l && a[dq[r - 1]] <= a[i]) --r;
            dq[r++] = i;
            if(i >= k) printf("%d ", a[dq[l]]);
        }
        printf("
    ");
    }
  • 相关阅读:
    fwt
    fft,ntt
    loj6077
    高维前缀和
    hihocoder 1496 寻找最大值
    HDU 5977 Garden of Eden
    扩展crt
    有标号的DAG计数I~IV
    BZOJ 3160 万径人踪灭
    Codeforces Round #524 (Div. 2) F
  • 原文地址:https://www.cnblogs.com/Maxx-el/p/13838006.html
Copyright © 2020-2023  润新知