zcy2333 @ 2018-11-05 08:00:56
#include<bits/stdc++.h>
using namespace std;
int f[2000000][21];
int n,m;
void RMQ()
{
for(int j=1;j<=log(n)/log(2);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]);
}
int search(int l,int r)
{
int t=log(r-l+1)/log(2);
return min(f[l][t],f[r-(1<<t)+1][t]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
cin>>f[i][0];
RMQ();
for(int i=1;i<=n;i++)
{ int l;
if(i-m<1) l=1;
else if(i==1) l=0;
else l=i-m;
int r=i-1;
printf("%d\n",search(l,r));
}
return 0;
}
下载第一个数据点,在本地测试答案都是对的..
by Ruirui_170219 @ 2018-11-05 08:04:53
f[2000000][21]
这是什么东东