小想法
查看原帖
小想法
995699
yuxuzhehuan楼主2024/8/18 12:49

这是我个人在比赛时的想法

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左右

2024/8/18 12:49
加载中...