版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YewSpadeJ/article/details/81908561
//滑动窗口
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,hea,tai;
int num[1000005],que[1000005],orde[1000005];
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>num[i];
hea=0,tai=0;
for(int i=1;i<=n;i++)
{
if(orde[hea]<i-k+1)
hea++;
tai++;
que[tai]=num[i];
orde[tai]=i;
int te=1;
while(que[tai]<=que[tai-te]&&tai-te>=hea)
te++;
que[tai-te+1]=que[tai];
orde[tai-te+1]=orde[tai];
tai=tai-te+1;
if(i>=k)
cout<<que[hea]<<" ";
}
cout<<endl;
hea=0,tai=0;
for(int i=1;i<=n;i++)
{
if(orde[hea]<i-k+1)
hea++;
tai++;
que[tai]=num[i];
orde[tai]=i;
int te=1;
while(que[tai]>=que[tai-te]&&tai-te>=hea)
te++;
que[tai-te+1]=que[tai];
orde[tai-te+1]=orde[tai];
tai=tai-te+1;
if(i>=k)
cout<<que[hea]<<" ";
}
return 0;
}