这是我个人在比赛时的想法
RMQ
#include<bits/stdc++.h>
using namespace std;
const int _=1e6+6;
int m,n,f[_][20],ans=1<<30;
inline int rmax(int l,int r)
{ int len=log2(r-l+1);
return max(f[l][len],f[r-(1<<len)+1][len]);
}
signed main()
{ cin>>n>>m;
for(int i=1;i<=n;i++) cin>>f[i][0];
for(int j=1;(1<<j)<=n;j++) for(int i=1;i+(1<<j)<=n+1;i++) f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);
for(int i=1;i+m<=n;i++) ans=min(ans,rmax(i,i+m));
cout<<ans;
return 0;
}
不带任何优化应该时间在600ms左右