码迷,mamicode.com
首页 > Windows程序 > 详细

模板:单调队列(Sliding Window)

时间:2018-07-19 21:13:51      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:pre   val   target   mes   .com   class   const   pos   模板   

http://lfyzit.com/problem/8

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1000005;
struct qwq{
    int pos;
    int val;
};
int kd(){
    int r=0, f=1;
    char c=getchar();
    while(c<0||c>9){
        if(c==-) f=-1;
        c=getchar();
    }
    while(c>=0&&c<=9){
        r=(r<<1)+(r<<3)+c-0;
        c=getchar();
    }
    return f*r;
}
int ansd[maxn], ansx[maxn];
qwq d[maxn], x[maxn];
int n, k, sum, num;
int dt, dw, xt, xw;
int main(){
    n=kd();
    k=kd();
    dt=dw=0;
    xt=xw=0;
    sum=0;
    for(int i=0; i<n; i++){
        while(dt<dw && i-d[dt].pos>=k)    dt++;
        while(xt<xw && i-x[xt].pos>=k)    xt++;
        num=kd();
        while(dt<dw && d[dw-1].val<=num)  dw--;
        d[dw].pos=i;
        d[dw].val=num;
        dw++;
        while(xt<xw && x[xw-1].val>=num)  xw--;
        x[xw].pos=i;
        x[xw].val=num;
        xw++;
        ansd[sum]=d[dt].val;
        ansx[sum]=x[xt].val;
        sum++;
    }
    for(int i=k-1; i<n; i++){
        cout<<ansx[i]<<" ";
    }
    cout<<endl;
    for(int i=k-1; i<n; i++){
        cout<<ansd[i]<<" ";
    }
    return 0;
}

 

模板:单调队列(Sliding Window)

标签:pre   val   target   mes   .com   class   const   pos   模板   

原文地址:https://www.cnblogs.com/Aze-qwq/p/9337763.html

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