首页 > 移动平台 > 详细

【单调队列例题】【移动窗口问题】【c++】window

时间:2020-05-03 13:09:54      阅读:44      评论:0      收藏:0      [点我收藏+]
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int a[N];
int ans_min[N];
int ans_max[N];
int main(){
    int n,m,c;
    scanf("%d%d%d",&n,&m,&c);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    deque<int> q1,q2;
    for(int i=1;i<=n;i++){
        while(q1.size()>0&&a[q1.back()]>=a[i])q1.pop_back();
        q1.push_back(i);
        if(q1.front()==i-m)q1.pop_front();
        while(q2.size()>0&&a[q2.back()]<=a[i])q2.pop_back();
        q2.push_back(i);
        if(q2.front()==i-m)q2.pop_front();
        if(i>=m){
            ans_min[i]=a[q1.front()];
            ans_max[i]=a[q2.front()];
        }
    }
    int flag=0;
    for(int i=m;i<=n;i++){
    	if(ans_max[i]-ans_min[i]<=c){
			printf("%d%c",i-m+1," \n"[i==n]);
			flag=1;
		}
	}
	if(!flag)puts("NONE");
    return 0;
}

一道单调队列的例题
题目链接 poj2823

【单调队列例题】【移动窗口问题】【c++】window

原文:https://www.cnblogs.com/-9-QAQ-6-/p/12821536.html

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