dyc2022 @ 2023-09-19 18:00:35
rt,好像会 mle。
#include<bits/stdc++.h>
using namespace std;
int lg[2000001],n,m;
int f[2000001][21];
main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&f[i][0]);
lg[1]=0;
for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
for(int i=1;i<=lg[n];i++)
for(int j=1;j<=n-(1<<i)+1;j++)
f[j][i]=min(f[j][i-1],f[j+(1<<(i-1))][i-1]);
printf("0\n");
for(int i=2;i<=n;i++)
{
int r=i-1;
int l=max(1,i-m);
int LOG=lg[r-l+1];
int ans=min(f[l][LOG],f[r-(1<<LOG)+1][LOG]);
printf("%d\n",ans);
}
return 0;
}
by N_z_ @ 2023-09-19 18:07:36
应该可以利用每层独立把空间变成线性的。
by chaynflow @ 2023-09-19 18:08:27
你可能需要人为的加一点 inf 就可以了。
by Register_int @ 2023-09-19 18:17:17
@dyc2022 考虑只需要
by dyc2022 @ 2023-09-19 18:22:14
@Register_int 谢谢%