• [Luogu] P1886 滑动窗口


    Luogu P1886 滑动窗口


    传送门

    此题为单调队列入门题。单调队列,可以(O(n))求一段数列中区间极值。记录队列中元素大小与该元素在原数组中的位置。当队首元素超出当前求值区间时,头指针加一;当当前将入队元素大于或小于尾元素时,尾指针减一,直到不符合上一条件时,将当前元素入队。然后要求极值只需输出队首元素即可。

    #include <cstdio>
    const int MAXN = 1000001;
    int n, k;
    int a[MAXN], que[MAXN], id[MAXN], head, tail;
    int main() {
        scanf("%d%d", &n, &k);
        for (int i = 1; i <= n; ++i)
            scanf("%d", &a[i]);
        head = 1; tail = 0;
        for (int i = 1; i <= n; ++i) {
            while(head <= tail && id[head] <= i - k) head++;
            while(head <= tail && que[tail] >= a[i]) tail--;
            que[++tail] = a[i]; id[tail] = i;
            if(i >= k) printf("%d ", que[head]);
        }
        printf("
    ");
        head = 1; tail = 0;
        for (int i = 1; i <= n; ++i) {
            while(head <= tail && id[head] <= i - k) head++;
            while(head <= tail && que[tail] <= a[i]) tail--;
            que[++tail] = a[i]; id[tail] = i;
            if(i >= k) printf("%d ", que[head]);
        }
        printf("
    ");
        return 0;
    }
    
  • 相关阅读:
    前端 时间转换为时间戳 时间戳转时间
    RT, 吞吐量,并发用户数,QPS名词解释
    Bluetooth开发资料的收集
    Day20_学成在线项目就业指导
    Day20_docker相关xml
    Day20_Jenkins安装文档
    八段锦口诀
    Day20_GitLab安装文档
    Day20_GitCommand
    Day20_DevOps
  • 原文地址:https://www.cnblogs.com/manziqi/p/8550683.html
Copyright © 2020-2023  润新知