MLE了两个点,好像听说过滚动数组优化的方法,但不会改
#include<bits/stdc++.h>
using namespace std;
const int N=1e6*2+1;
int a[N],f[N][22],lg[N];
int n,m;
void init(){
int t=log(n)/log(2)+1;
for(int j=1;j<t;j++){
for(int i=1;i<=n-(1<<j)+1;i++){
f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]);
}
}
for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1;
}
int query(int l,int r){
int k=lg[r-l+1];
return min(f[l][k],f[r-(1<<k)+1][k]);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][0]=a[i];
}
init();
cout<<0<<endl;
for(int i=2;i<=n;i++){
if(i<=m) cout<<query(1,i-1)<<'\n';
else cout<<query(i-m,i-1)<<'\n';
}
return 0;
}