滑动窗口
作者:
溜溜odd
,
2022-01-21 01:14:52
,
所有人可见
,
阅读 229
#include<iostream>
using namespace std;
const int N=1000100;
int n,k;
int a[N],q[N];
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++) cin>>a[i];
int hh=0,tt=-1;
for(int i=0;i<n;i++)
{
if(hh<=tt&& q[tt]-q[hh]>=k-1) hh++;
while(hh<=tt&&a[i]<=a[q[tt]]) tt--;
tt++;
q[tt]=i;
if(i>=k-1) cout<<a[q[hh]]<<' ';
}
puts("");
hh=0,tt=-1;
for(int i=0;i<n;i++)
{
if(hh<=tt&&q[tt]-q[hh]>=k-1) hh++;
while(hh<=tt&&a[i]>=a[q[tt]]) tt--;
tt++;
q[tt]=i;
if(i>=k-1) cout<<a[q[hh]]<<' ';
}
}