`
Simone_chou
  • 浏览: 195771 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Sliding Window(RMQ)

    博客分类:
  • POJ
 
阅读更多
Sliding Window
Time Limit: 12000MS   Memory Limit: 65536K
Total Submissions: 35974   Accepted: 10648
Case Time Limit: 5000MS

Description

An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves rightwards by one position. Following is an example: 
The array is [1 3 -1 -3 5 3 6 7], and k is 3. Window position Minimum value Maximum value
[1  3  -1] -3  5  3  6  7  -1 3
 1 [3  -1  -3] 5  3  6  7  -3 3
 1  3 [-1  -3  5] 3  6  7  -3 5
 1  3  -1 [-3  5  3] 6  7  -3 5
 1  3  -1  -3 [5  3  6] 7  3 6
 1  3  -1  -3  5 [3  6  7] 3 7

Your task is to determine the maximum and minimum values in the sliding window at each position. 

Input

The input consists of two lines. The first line contains two integers n and k which are the lengths of the array and the sliding window. There are n integers in the second line. 

Output

There are two lines in the output. The first line gives the minimum values in the window at each position, from left to right, respectively. The second line gives the maximum values. 

Sample Input

8 3
1 3 -1 -3 5 3 6 7

Sample Output

-1 -3 -3 -3 3 3
3 3 5 5 6 7

 

      题意:

      给出 N(1 ~ 10 ^ 6) 和 K,后给出 N 个数,滑动窗口的宽度为 K,说明每次只能看到 K 个数,窗口从左滑到右,输出每次滑动的最小值和最大值。

 

      思路:

      RMQ。维护区间的最小值 和 最大值。求区间最值问题。O(n log n)的预处理 + O(1)的查询。但是用二维数组保存的话会 MLE,所以要优化一下空间,RMQ更新长度更新到 k 长度的 ans( 2 ^ ans <= k) 即可,不需要更新完全部的长度 n 长度的 ans 值(2 ^ ans <= n),这样的话,可以省略掉第二维来节省空间。

 

      AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAX = 1000005;

int n, k, ans;
int Min[MAX], Max[MAX];

void RMQ_init() {
        for (int j = 1; j <= ans; ++j) {
                for (int i = 0; i + (1 << j) - 1 < n; ++i) {
                        Max[i] = max(Max[i], Max[i + (1 << (j - 1))]);
                        Min[i] = min(Min[i], Min[i + (1 << (j - 1))]);
                }
        }
}

int main () {

        while (~scanf("%d%d", &n, &k)) {
                ans = 0;

                for (int i = 0; i < n; ++i) {
                        scanf("%d", &Min[i]);
                        Max[i] = Min[i];
                }

                while ((1 << (ans + 1)) <= k) ++ans;
                RMQ_init();

                for (int i = 0; i <= n - k; ++i) {
                        printf("%d", min(Min[i], Min[i + k - (1 << ans)]));
                        i == (n - k) ? printf("\n") : printf(" ");
                }
                for (int i = 0; i <= n - k; ++i) {
                        printf("%d", max(Max[i], Max[i + k - (1 << ans)]));
                        i == (n - k) ? printf("\n") : printf(" ");
                }
        }

        return 0;
}

 

 

分享到:
评论

相关推荐

    slidingwindow.zip

    在本文中,我们将深入探讨如何使用Qt5.5.1框架和Microsoft Visual C++ 2013(msvc2013)编译器,通过QSplitter控件来实现一个滑动窗口功能。QSplitter是Qt库中的一个强大组件,允许用户动态调整多个子窗口或小部件的...

    UDP滑动窗口代码,UDP Sliding Window Protocol

    UDP滑动窗口协议(UDP Sliding Window Protocol)是一种在用户数据报协议(UDP)基础上实现的流量控制机制。它借鉴了TCP的滑动窗口概念,但简化了许多复杂性,适用于实时性要求较高、对丢包容忍度较低的场景。在这个...

    Sliding window ,滑窗协议 实验报告,代码,实验截图等

    滑窗协议(Sliding Window Protocol)是数据通信领域中一种重要的流量控制协议,它在确保数据传输可靠性的同时,还能有效地利用网络带宽。本实验报告将深入探讨滑窗协议的基本原理、实现方式以及其实验过程。 滑窗...

    Sliding Window

    这是来自poj的一道关于单调队列的题目。分为max_qu和min_qu两部分来做。

    Sliding Window_(System Approach 4ed)

    ### 滑动窗口算法(Sliding Window Algorithm) #### 简介 滑动窗口算法是一种在计算机网络中实现可靠传输的重要技术。该算法通过控制发送方与接收方之间的数据流来确保数据能够准确无误地传输。在本文中,我们将...

    sliding_window-master

    滑动窗口(Sliding Window)是一种在数据处理和算法设计中常见的技术,尤其在数组、字符串、时间序列分析等领域有着广泛的应用。这个压缩包“sliding_window-master”显然是一个关于Python实现滑动窗口算法的项目,...

    Sliding window based weighted maximal frequent pattern mining over data streams

    ### 滑动窗口下的加权最大频繁模式挖掘在数据流中的应用 #### 论文概览 本文献是一篇关于数据流分析的经典SCI论文,发表于2013年。该研究主要聚焦于滑动窗口模型下针对数据流进行加权最大频繁模式挖掘的方法。...

    SlidingWindow

    在这个名为"SlidingWindow"的项目中,我们看到它是如何被用来实现一种叫做"伸缩滑动窗口"的功能,特别提到了在CentOS 6.6操作系统上进行了测试并成功运行。 `QSplitter`是Qt中的一个容器类,它能够将多个子窗口...

    SWP.rar_SWP-NFC_sliding window_swp

    滑动窗口协议(Sliding Window Protocol)是一种在网络通信中用于流量控制的协议,它允许发送方在等待确认之前发送多个数据包,从而提高了网络效率。SWP(Sliding Window Protocol)通常与NFC(Near Field ...

    Sliding window protocol.pdf

    滑动窗口协议是一种在计算机网络中实现可靠数据传输的机制。该协议主要用于确保数据包在网络中的传输是可靠的,即数据包不会在传输过程中丢失或损坏。滑动窗口协议是在用户数据报协议(UDP)和传输控制协议(TCP)中...

    sliding-window:滑动窗口是一个一维块分配自由系统

    var slidingWindow = SlidingWindow ( alloc , free , options ) ; alloc是一个分配东西的函数。 它接收两个参数:第一个参数是要分配的块的index 。 第二个参数是一个可选参数,可以在move()第二个参数处传输。 ...

    TCP Sliding Window滑动窗口协议演示动画

    TCP滑动窗口协议是传输控制协议(TCP)中一种重要的流量控制机制,它确保了数据在两个通信端点之间的可靠传输。本动画演示了滑动窗口协议的工作原理,通过Flash技术,用户可以调整参数,直观地理解其动态过程。...

    sliding-window:使用滑动窗口拆分或合并图像

    滑动窗口技术是一种在...在"sliding-window-master"这个项目中,可能包含了使用Python实现滑动窗口的示例代码、图像数据以及相关的说明文档。通过查看这些文件,你可以更深入地理解如何在实际项目中应用滑动窗口技术。

    2. Pattern Sliding Window.zip

    滑动窗口是算法设计中的一种常见模式,尤其在处理数组或字符串问题时非常有用。它在数据结构和算法领域占有重要地位,对于理解和解决许多面试题至关重要。滑动窗口的基本思想是在一个序列(如数组或字符串)上定义一...

    Consistency Analysis for Sliding-Window Visual Odometry

    视觉里程计(Visual Odometry,VO)和视觉SLAM(Simultaneous Localization and Mapping,同时定位与建图)是计算机视觉和机器人领域的重要研究课题,它们通过从相机获取的视觉信息来估计相机或者机器人的位置和运动...

    [POJ2823]Sliding Window(单调队列)by_zgx

    博客链接 http://blog.csdn.net/CABI_ZGX/article/details/52701138

    ACM中的RMQ和LCA问题

    POJ 3264 Balanced Lineup和POJ 2823 Sliding Window问题则分别展示了RMQ问题在不同场景下的应用。 总的来说,RMQ和LCA是ACM中重要且实用的数据结构问题,它们涉及到动态规划、线段树、Sparse Table、并查集等多种...

    duilib_sliding-window-display.rar

    这个"duilib_sliding-window-display.rar"压缩包显然包含了关于如何在Duilib框架下实现滑动窗口(Sliding Window)和悬浮窗口(Floating Window)的示例或代码资源。 首先,我们要理解滑动窗口的概念。滑动窗口通常...

    MATLAB典型环节代码-Face-detection-with-a-sliding-window:带有滑动窗口的人脸检测

    MATLAB典型代码 (示例面部检测结果来自anXDdd。) 项目4:带有滑动窗口的人脸检测 简短的 截止时间: 1月1日,晚上11:59。 所需文件:results / index.md和代码/ ...滑动窗口模型在概念上很简单:将所有图像块独立地...

    PAPR-Reduction-of-FBMC-Using-Sliding-Window.rar_FBMC-OQAM_PAPR-F

    sliding window and active constellation extension for fbmc oqam signal

Global site tag (gtag.js) - Google Analytics