#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define maxn 1000005
using namespace std;
int a[maxn];
int n;
int b[maxn];
int e[maxn];
int ans1,ans2;
int c[maxn];
int d[maxn];
int head = 1;
int tail=1;
int k;
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
if(k==1)
{
for(int i=1;i<=2;i++)
{
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}
for(int j=1;j<=k;j++)//最小值数组初始化
{
if(j==1)
d[head]=j;
else
{
while(tail>=head&&a[d[tail]]>a[j])
tail--;
tail++;
d[tail]=j;
}
}
ans2++;
e[ans2]=d[head];
if(d[head]==1)
head++;
for(int i=k+1;i<=n;i++)
{
while(tail>=head&&a[d[tail]]>a[i])
tail--;
tail++;
d[tail]=i;
ans2++;
e[ans2]=d[head];
if(d[head]==i-k+1) head++;
}
for(int i=1;i<=ans2;i++)
cout<<a[e[i]]<<" ";
cout<<endl;
for(int j=1;j<=k;j++)//最大值数组初始化
{
if(j==1)
b[head]=j;
else
{
while(tail>=head&&a[b[tail]]<a[j])
tail--;
tail++;
b[tail]=j;
}
}
ans1++;
c[ans1]=b[head];
if(b[head]==1) head++;
for(int i=k+1;i<=n;i++)
{
while(tail>=head&&a[b[tail]]<a[i])
tail--;
tail++;
b[tail]=i;
ans1++;
c[ans1]=b[head];
if(b[head]==i-k+1) head++;
}
for(int i=1;i<=ans1;i++)
cout<<a[c[i]]<<" ";
return 0;
}
滑动窗口--POJ2823--洛谷P1886--Sabrina--Sabrinadol
最新推荐文章于 2021-10-07 21:31:24 发布