ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RMQ——ST表

2022-02-04 17:02:30  阅读:149  来源: 互联网

标签:RMQ log2 int max st ST


ST表

ST表是一种解决RMQ问题的强有力工具,

可以做到O(nlogn)预处理,O(1)查询。

st[i][j] 表示区间 [i, i + 2 ^ j - 1] 的最大值。

初值 st[i][0] = a[i]。

状态转移 st[i][j] = max(st[i][j - 1],  st[i + 2 ^ ( j - 1)][j - 1]).。

初始化:

inline void init(){
    for(int  i = 1; (1 << i) <= n; i ++)
        for(int j = 1; j + (1 << i) - 1 <= n; j ++){
            st[j][i] = max(st[j][i - 1], st[j + (1 << (i - 1))][i - 1]);
        }
}

 查询:

对于每个询问,拆成 [l, l + 2 ^ k - 1], [r - 2 ^ k + 1, r], k = log2(r - l + 1) 下取整

inline int query(int l, int r){
    int k = log2(r - l + 1);
    return max(st[l][k], st[r - (1 << k) + 1][k];
}

 

标签:RMQ,log2,int,max,st,ST
来源: https://www.cnblogs.com/William-Sg/p/15863031.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有