点击跳转查看题意
由题意显而易见可得,这是一道RMQ的裸题,ST表的建表复杂度为O(nlogn),查询为O(1),能完美跑过此题的数据,这题的题意是查询以每个数为起点长度为m的区间内部的最小值,我们只需要枚举一下起点,每个区间依次查询就好,这题是一道ST表的裸题
#include<cstdio>//100
#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 1000005
using namespace std;
int st[maxn][25],log2[maxn],n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&st[i][0]);
log2[0]=-1;
for(int i=1;i<=n;i++)
log2[i]=log2[i>>1]+1;
for(int k=1;k<=25;k++)
for(int i=1;i+(1<<k)-1<=n;i++)
st[i][k]=min(st[i][k-1],st[i+(1<<(k-1))][k-1]);
for(int i=1;i+m-1<=n;i++)
{
int k=log2[m];
printf("%d\n",min(st[i][k],st[(i+m-1)-(1<<k)+1][k]));
}
return 0;
}