zoukankan      html  css  js  c++  java
  • 【单调队列】滑动窗口

     P1886 滑动窗口

    单调队列经典题目直接上代码

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 const int sz = 1000010;
     6 int n, k;
     7 int q[sz], p[sz], a[sz];
     8 void work_min() {
     9     int head = 1, tail = 0;
    10     for(int i = 1; i <= n; i++) {
    11         while(head <= tail && q[tail] >= a[i]) tail--;
    12         q[++tail] = a[i];
    13         p[tail] = i;
    14         while(p[head] <= i-k) head++;
    15         if(i >= k) printf("%d ", q[head]);
    16     }
    17     printf("
    ");
    18 }
    19 void work_max() {
    20     int head = 1, tail = 0;
    21     for(int i = 1; i <= n; i++) {
    22         while(head <= tail && a[i] >= q[tail]) tail--;
    23         q[++tail] = a[i];
    24         p[tail] = i;
    25         while(p[head] <= i-k) head++;
    26         if(i >= k) printf("%d ", q[head]);
    27     }
    28     printf("
    ");
    29 }
    30 int main() {
    31     scanf("%d%d", &n, &k);
    32     for(int i = 1; i <= n; i++)
    33         scanf("%d", &a[i]);
    34     work_min();
    35     work_max();
    36     return 0;
    37 }
  • 相关阅读:
    三种方法
    渐渐明白
    出手的时候到了
    URL OpenDocument
    熟练使用IDT
    时间快到了
    还是这样
    接口的多态性
    接口(interface)的使用
    抽象类(abstract class)与抽象方法
  • 原文地址:https://www.cnblogs.com/Hwjia/p/9884133.html
Copyright © 2011-2022 走看看