我用的是单调队列的方法。
望大佬改正,谢谢。
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const long long x=10e6+10;
int N,K,da[x],dl[x],id[x],le=1,ri;
int main()
{
cin>>N>>K;
for(int i=1;i<=N;i++)
{
scanf("%d",&da[i]);
}
for(int i=1;i<=N;i++)
{
while(le<=ri&&da[i]>=dl[ri])
{
ri--;
}
ri++;
dl[ri]=da[i];
id[ri]=i;
if(id[le]+K<=i)
{
le++;
}
if(i>=K)
{
printf("%d ",dl[le]);
}
}
return 0;
}