#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 1005;
int rmq[MAXN][20];
int a[MAXN];
int mm[MAXN];//最大的小于等于i的2^mm[i]
void initRMQ(int n)
{
mm[0]=-1;
for(int i=1;i<=n;i++)
{
mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1];
rmq[i][0]=a[i];
}
for(int j=1;j<=mm[n];j++)
for(int i=1;i+(1<<j)-1<=n;i++)
rmq[i][j]=max(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
}
int RMQ(int x,int y)
{
int k=mm[y-x+1];
return max(rmq[x][k],rmq[y-(1<<k)+1][k]);
}
rmq模板
最新推荐文章于 2022-12-26 16:51:49 发布