zoukankan      html  css  js  c++  java
  • poj2823滑动窗口

    这个是单调队列的入门题目。值得注意的一点是队列中的数的index是单调递增的,所以从队首删除的时候从前向后循环找到第一个index满足>= i - k + 1条件的元素作为队首元素就可以了,这也是我一开始没想明白的一点。

     1 //#include "stdafx.h"
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 int n, k, a[1000005], q[1000005];
     7 void max_value()
     8 {
     9     int front = 0, end = 0;
    10     for (int i = 0; i < n; i++)
    11     {
    12         while (a[q[end]] <= a[i] && end >= front)
    13         {
    14             end--;
    15         }
    16         q[++end] = i;
    17         while (q[front] < i - k + 1 && front < end)
    18         {
    19             front++;
    20         }
    21         if (i >= k - 1)
    22             printf("%d ", a[q[front]]);
    23     }
    24     puts("");
    25 }
    26 void min_value()
    27 {
    28     int front = 0, end = 0;
    29     for (int i = 0; i < n; i++)
    30     {
    31         while (a[q[end]] >= a[i] && end >= front)
    32         {
    33             end--;
    34         }
    35         q[++end] = i;
    36         while (q[front] < i - k + 1 && front < end)
    37         {
    38             front++;
    39         }
    40         if (i >= k - 1)
    41             printf("%d ", a[q[front]]);
    42     }
    43     puts("");
    44 }
    45 int main()
    46 {
    47     cin >> n >> k;
    48     for (int i = 0; i < n; i++)
    49     {
    50         scanf("%d", &a[i]);
    51     }
    52     min_value();
    53     memset(q, 0, sizeof(q));
    54     max_value();
    55     //system("pause");
    56     return 0;
    57 }
  • 相关阅读:
    [转载]iOS 开发中为什么更新UI都要放在主线程中?
    GCD小结
    多线程的实现
    图片缓存、PathForResource、NSBundle
    IOS全路径和文件名方法、NSBundle
    plist文件
    iphone区别翻新机
    iPhone4S国行、港版、美版、妖机识别与选购(转)
    应用沙盒
    IOS实现新特性功能
  • 原文地址:https://www.cnblogs.com/wangyiming/p/6169362.html
Copyright © 2011-2022 走看看