基于Sparse Table 算法的RMQ模板
初始化:
//n为元数的个数
int bitn=(int)(log(n)/log(2))
for (int i=0; i<n; ++i)
f[i][0]=input[i];
for (int j=1; j<bitn; ++j)
for (int i=0; i<n; ++i)
{
if (i+(1<<(j-1))>=n) break;
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
查询
int query(int s,int e) //查询区间[s,e]的最值
{
int k=(int)((log(e-s+1.0)/log(2.0)));
return max(f[s][k],f[e-(1<<k)+1][k]);
}

浙公网安备 33010602011771号