news 2026/4/16 15:43:28

[模板]st表 RMQ区间最值问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[模板]st表 RMQ区间最值问题

【模板】静态区间最值_牛客题霸_牛客网

st表基于倍增的思想实现

最大值最小值思路一样 这里以最大值讲解

一个序列的子区间的个数显然有n*n个 根据倍增思想 我们首先在这个规模为n*n的状态空间中选择一些2的整数次幂的位置作为代表值

设f[i][j]表示数列中子区间[i][i+2^j-1]中的最大值 也就是包括i本身 一段长度为2^j的区间最大值 递推边界显然是f[i][0]=a[i] 也就是[i,i]区间中的最大值是本身;

在递推的时候 我们把子区间成倍增长 有公式f[i][j]=max( f[i][j-1], f[i+(1<<(j-1))][j-1] ) 也就是把一个区间的最值 分为了两个区间的最值中更大的那个

代码实现

int a[N],fmaxn[N][20],fminn[N][20]; void st(){ for(int i=1;i<=n;i++)fmaxn[i][0]=a[i],fminn[i][0]=a[i]; int t=log(n)/log(2)+1; for(int j=1;j<t;j++){ for(int i=1;i<=n-(1<<j)+1;i++){ fmaxn[i][j]=max(fmaxn[i][j-1],fmaxn[i+(1<<(j-1))][j-1]); fminn[i][j]=min(fminn[i][j-1],fminn[i+(1<<(j-1))][j-1]); } } }

最值查询部分

查询区间[l,r]的最值的时候 我们先计算一个k满足2^k<=r-l+1<2^(k+1) 也就是2的k次幂小于区间长度下 然后比较以l开头的2^k个数的区间中的最大值 和 r结尾的2^k个数字的区间的最大值 因为求的是最值 所以这两个区间可以重叠 但是必须包含所有的元素

查询代码实现:

int query(int op,int l,int r){ int k=log(r-l+1)/log(2); if(op==1)return min(fminn[l][k],fminn[r-(1<<k)+1][k]); if(op==2)return max(fmaxn[l][k],fmaxn[r-(1<<k)+1][k]); }

该题完整代码实现:

#include <bits/stdc++.h> using namespace std; int n,q; const int N=5e5+5; int a[N],fmaxn[N][20],fminn[N][20]; void st(){ for(int i=1;i<=n;i++)fmaxn[i][0]=a[i],fminn[i][0]=a[i]; int t=log(n)/log(2)+1; for(int j=1;j<t;j++){ for(int i=1;i<=n-(1<<j)+1;i++){ fmaxn[i][j]=max(fmaxn[i][j-1],fmaxn[i+(1<<(j-1))][j-1]); fminn[i][j]=min(fminn[i][j-1],fminn[i+(1<<(j-1))][j-1]); } } } int query(int op,int l,int r){ int k=log(r-l+1)/log(2); if(op==1)return min(fminn[l][k],fminn[r-(1<<k)+1][k]); if(op==2)return max(fmaxn[l][k],fmaxn[r-(1<<k)+1][k]); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>q; for(int i=1;i<=n;i++)cin>>a[i]; st(); while(q--){ int op,l,r; cin>>op>>l>>r; cout<<query(op,l,r)<<'\n'; } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:41:21

5个GitHub图片显示难题的解决方法:从本地引用到跨平台兼容

作为一名GitHub新手&#xff0c;你是否经常遇到教程中的图片无法正常显示&#xff1f;那些破碎的图标和404错误不仅影响学习体验&#xff0c;更让你在关键操作步骤上卡壳。本文将分享一套实用工具箱&#xff0c;帮你彻底解决GitHub图片显示问题&#xff0c;让技术文档的视觉效果…

作者头像 李华
网站建设 2026/4/3 4:27:42

深度解析:ElasticJob在云原生环境下的架构革命

深度解析&#xff1a;ElasticJob在云原生环境下的架构革命 【免费下载链接】shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob 问题分析&#xff1a;传统任务调度在容器化环境中的技术瓶颈 随着企业应用全面向云原…

作者头像 李华
网站建设 2026/4/16 12:43:31

Qwen3-VL多模态大模型:从视觉感知到智能交互的技术演进之路

Qwen3-VL多模态大模型&#xff1a;从视觉感知到智能交互的技术演进之路 【免费下载链接】Qwen3-VL-235B-A22B-Instruct-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-VL-235B-A22B-Instruct-FP8 你是否曾在处理复杂图像时感到力不从心&#xff1f;是否…

作者头像 李华
网站建设 2026/4/14 23:34:22

17、硬件支持相关要点解析

硬件支持相关要点解析 1. 硬件获取与选择 在选择硬件时,关键在于确保系统所支持的硬件能满足网络需求。以下是一些具体的操作建议: - 查询硬件兼容性 :可前往操作系统的官方网站查看硬件兼容性列表。 - 查阅手册 :通过查看系统的手册页(man pages),或者使用 ap…

作者头像 李华
网站建设 2026/4/16 15:16:52

Mamba选择性状态空间模型:重新定义序列建模的效率边界

Mamba选择性状态空间模型&#xff1a;重新定义序列建模的效率边界 【免费下载链接】mamba 项目地址: https://gitcode.com/GitHub_Trending/ma/mamba 还在为处理长序列数据时的内存瓶颈和计算效率发愁吗&#xff1f;传统的循环神经网络和Transformer架构在序列建模领域…

作者头像 李华
网站建设 2026/4/16 10:59:18

ffmpeg-python数据流:解决大视频处理的内存瓶颈

ffmpeg-python数据流&#xff1a;解决大视频处理的内存瓶颈 【免费下载链接】ffmpeg-python Python bindings for FFmpeg - with complex filtering support 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpeg-python 当你在处理4K视频时&#xff0c;是否遇到过Pytho…

作者头像 李华