首页 > 其他 > 详细

范围最小值问题(RMQ)

时间:2019-06-10 13:33:16      阅读:113      评论:0      收藏:0      [点我收藏+]

给出一个数组,实现一个数据结构以支持查询操作Query(L, R):计算{AL, AL+1, ... , AR}

void RMQ_init(const vector<int>& A) {
    int n = A.size();
    for(int i = 0; i < n; i++) d[i][0] = A[i];
    for(int j = 1; (1<<j) <= n; j++)
       for(int i = 0; i + (1<<j) <= n; i++)
           d[i][j] = min(d[i][j-1], d[i+(1<<(j-1))][j-1]);
}

int RMQ(int L, int R){
    int k = 0;
    while((1<<(k+1)) <= R-L+1) k++;
    return min(d[L][k], d[R-(1<<k)][k]);
}

 

范围最小值问题(RMQ)

原文:https://www.cnblogs.com/hanasaki/p/10996670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!