码迷,mamicode.com
首页 > 其他好文 > 详细

滑动窗口

时间:2019-07-16 14:04:27      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:name   cstring   tar   amp   clu   turn   blank   mes   for   

题面

单调队列版子题

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1000005;

int n,m,top1,low1,top2,low2;
int ans1[N],ans2[N],q1[N],q2[N],a[N];

int get(){
    char z=getchar();
    int y=1,l=0;
    while(z>‘9‘||z<‘1‘){
        if(z==‘-‘){
            y=-1;
        }
        z=getchar();
    }
    while(z>=‘0‘&&z<=‘9‘){
        l=l*10+z-‘0‘;
        z=getchar();
    }
    return l*y;
}

int main(){
    n=get();m=get();
    for(int i=1;i<=n;i++){
        scanf("%d",a+i);
        while(top1>=low1&&a[q1[top1]]>=a[i])top1--;
        q1[++top1]=i;
        while(top2>=low2&&a[q2[top2]]<=a[i])top2--;
        q2[++top2]=i;
        if(i>=m){
            while(q1[low1]<i-m+1)low1++;
            while(q2[low2]<i-m+1)low2++;
            ans1[i-m+1]=a[q1[low1]];
            ans2[i-m+1]=a[q2[low2]];
        }
    }
    for(int i=1;i<=n-m+1;i++){
        printf("%d ",ans1[i]);
    }
    printf("\n");
    for(int i=1;i<=n-m+1;i++){
        printf("%d ",ans2[i]);
    }
    return 0;
}

  

 

滑动窗口

标签:name   cstring   tar   amp   clu   turn   blank   mes   for   

原文地址:https://www.cnblogs.com/ainiyuling/p/11194443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!