标签:nim log tmp init 查询 最小值 时间 ret mini
范围最小值问题(Range Minimum Query)
常用Tarjan的Sparse-Table算法,预处理时间为\(O(nlogn)\),查询为\(O(1)\)
int rmq[maxn][maxn];
void rmq_init(int a[],int l,int r)
{
for (int i = 0; (1 << i) <= r-l+1; ++i)
for (int j = l; j + (1 << i) - 1 <= r; ++j)
rmq[j][i] = (i == 0) ? a[j] : min(rmq[j][i - 1], rmq[j + (1 << (i - 1))][i - 1]);
}
int rmq_query(int l, int r)
{
int tmp = 0;
while ((1 << (tmp + 1)) <= r - l + 1)tmp++;
return min(rmq[l][tmp], rmq[r - (1<<tmp) + 1][tmp]);
}
标签:nim log tmp init 查询 最小值 时间 ret mini
原文地址:https://www.cnblogs.com/maoruimas/p/9737733.html