首页 > 其他 > 详细

LGOJ P1886 【滑动窗口】

时间:2019-11-08 01:28:29      阅读:148      评论:0      收藏:0      [点我收藏+]

【模板】单调队列

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N];
int k,n;
inline int read()
{
    char c=getchar();int x=0;bool minus=0;
    for(;!isdigit(c);c=getchar())
        if(c=='-')minus=1;
    for(;isdigit(c);c=getchar())
        x=x*10+c-'0';
    if(minus)return -x;
    else return x;
}
deque<int> Q;

inline void ins_min(int i)
{
    while(!Q.empty()&&a[Q.back()]>=a[i])Q.pop_back();
    Q.push_back(i);
    while(!Q.empty()&&Q.front()<=i-k)Q.pop_front();
}

inline void ins_max(int i)
{
    while(!Q.empty()&&a[Q.back()]<=a[i])Q.pop_back();
    Q.push_back(i);
    while(!Q.empty()&&Q.front()<=i-k)Q.pop_front();
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)a[i]=read();
    for(int i=1;i<k;i++)ins_min(i);
    for(int i=k;i<=n;i++)
    {
        ins_min(i);
        printf("%d ",a[Q.front()]);
    }
    Q.clear();
    cout<<endl;
    for(int i=1;i<k;i++)ins_max(i);
    for(int i=k;i<=n;i++)
    {
        ins_max(i);
        printf("%d ",a[Q.front()]);
    }

    return 0;
}

LGOJ P1886 【滑动窗口】

原文:https://www.cnblogs.com/kion/p/11817038.html

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