题解:本题主要考查单调队列或优先队列。这是一题经典的题目,这题数据很大暴力超时,所以就用单调队列来优化。
代码如下:
#include<iostream>
using namespace std;
int n,k,i,h,t;
int a[4627383],v[7385475],q[54534533];
int main()
{
cin>>n>>k;
for(i=1;i<=n;i++)cin>>a[i];
h=1;t=1;
for(i=1;i<=n;i++)//最小值
{
while(h<t&&v[t-1]>a[i])t--;
v[t]=a[i];
q[t++]=i;
if(i-q[h]>=k)h++;
if(i>=k)cout<<v[h]<<" ";
}
cout<<endl;
h=1;t=1;
for(int i=1;i<=n;i++)//最大值
{
while(h<t&&v[t-1]<a[i])t--;
v[t]=a[i];
q[t++]=i;
if(i-q[h]>=k)h++;
if(i>=k)cout<<v[h]<<" ";
}
return 0;
}