首页 > 其他 > 详细

滑动窗口问题

时间:2016-03-26 21:58:35      阅读:226      评论:0      收藏:0      [点我收藏+]

给定一个数组a, 求长度为m的连续区间的最大值.

 

使用单调队列, 时间复杂度O(n) .

#include<bits/stdc++.h>
using namespace std;

const int N = 1005;

int A, n;
int a[N];
int mx[N];

struct data {
    int p, v;
};
deque<data> Q;

void Push(data t)
{
    while ((!Q.empty()) && Q.back().v < t.v) Q.pop_back();
    Q.push_back(t);
}

void GETMAX()
{
    for (int i = 1; i < n; ++ i) {
        Push((data) {i, a[i]});
    }
    for (int i = n; i <= A; ++ i) {
        Push((data) {i, a[i]});
        while (Q.front().p < i - n + 1) Q.pop_front();
        mx[i] = Q.front().v;
    }
}

int main()
{
    scanf("%d%d", &A, &n);
    for (int i = 1; i <= A; ++ i)
        scanf("%d", &a[i]);
    GETMAX();
    for (int i = n; i <= A; ++ i)
        printf("[%d,%d] --> %d\n", i - n + 1, i, mx[i]);
}

 

滑动窗口问题

原文:http://www.cnblogs.com/jszyxw/p/5323902.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!