ST表

没有修改的区间最值
O(nlogn)预处理
O(1) 查询
f[i][j] : 从 i 开始长度 2j 的范围内的最大值
预处理是 前后两部分 合并结果
查询的时候从前往后长度 T 和 从后向前长度 T 的两段区间 并
T 是接近 rl+1 最大的二进制数

void st_pre() {
for (int i = 1; i <= n; i++) f[i][0] = a[i] ;
int M = log(n) / log(2);
for (int j = 1; j <= M; j++)
for (int i = 1; i + (1 << j) - 1 <= n; i++)
f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]) ;
}
int st_qry(int l, int r) {
int k = log(r - l + 1) / log(2);
return max(f[l][k], f[r - (1 << k) + 1][k]) ;
}

__EOF__

作  者哈奇莱特
出  处https://www.cnblogs.com/lighthqg/p/17612428.html
关于博主:这个人很懒 什么也没有留下
版权声明:未获得本人同意请勿随意转载
声援博主:制作不易 点个赞吧

posted @   哈奇莱特  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示