附上代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e6;
int tree[4*MAXN];
int i,n,m,tl,tr;
inline int read(){
char ch=getchar();
int s=0,f=1;
while( ch<'0' || ch>'9' ){
if( ch=='-' )
f=-1;
ch=getchar();
}
while( ch>='0' && ch<='9' ){
s=s*10+ch-48;
ch=getchar();
}
return s*f;
}
void build(int l,int r,int p){
if( l==r ){
tree[p]=read();
return;
}
int mid=(l+r)/2;
build(l,mid,p*2);
build(mid+1,r,p*2+1);
tree[p]=min(tree[p*2],tree[p*2+1]);
}
int query(int nl,int nr,int p){
if( nl>=tl && nr<=tr )
return tree[p];
int ans=1e9,mid=(nl+nr)/2;
if( mid>=tl )
ans=min(ans,query(nl,mid,p*2));
if( mid<tr )
ans=min(ans,query(mid+1,nr,p*2+1));
return ans;
}
int main() {
n=read(),m=read();
build(1,n,1);
cout<<0<<endl;
for(i=2;i<=n;i++){
if( i<=m )
tl=1,tr=i-1;
else
tl=i-m,tr=i-1;
cout<<query(1,n,1)<<endl;
}
return 0;
}