news 2026/6/23 10:21:38

[模板]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/6/23 18:32:47

Matlab COCO API终极指南:从数据处理到模型评估

Matlab COCO API终极指南&#xff1a;从数据处理到模型评估 【免费下载链接】cocoapi COCO API - Dataset http://cocodataset.org/ 项目地址: https://gitcode.com/gh_mirrors/co/cocoapi 还在为计算机视觉项目中的复杂标注数据而头疼吗&#xff1f;Matlab COCO API为…

作者头像 李华
网站建设 2026/6/23 18:11:06

14、网络PF配置的日志、监控、统计与优化

网络PF配置的日志、监控、统计与优化 日志设置与处理 设置 syslogd 处理数据步骤如下: 1. 选择日志工具( log facility )、日志级别( log level )和操作( action )。 2. 将结果行添加到 /etc/syslog.conf 文件。例如,若已设置 loghost.example.com 接收…

作者头像 李华
网站建设 2026/6/23 18:09:35

pvar2连玉君安装包:轻松掌握数据分析利器

pvar2连玉君安装包&#xff1a;轻松掌握数据分析利器 【免费下载链接】pvar2连玉君安装包及说明 pvar2连玉君安装包及说明本仓库提供了一个名为pvar2连玉君.zip的资源文件下载 项目地址: https://gitcode.com/open-source-toolkit/483e6 还在为复杂的数据分析工具而烦恼…

作者头像 李华
网站建设 2026/6/23 8:27:36

Python 3.13兼容性终极指南:rembg背景移除工具深度解密

当你准备将项目升级到Python 3.13时&#xff0c;是否曾担心rembg这个强大的背景移除工具会突然"停止工作"&#xff1f;作为技术侦探&#xff0c;我们将带你穿越版本升级的迷宫&#xff0c;揭开兼容性谜题的真相。 【免费下载链接】rembg Rembg is a tool to remove i…

作者头像 李华
网站建设 2026/6/23 3:27:53

如何快速配置NeverSink过滤器:POE2玩家的终极指南

如何快速配置NeverSink过滤器&#xff1a;POE2玩家的终极指南 【免费下载链接】NeverSink-Filter-for-PoE2 This is a lootfilter for the game "Path of Exile 2". It adds colors, sounds, map icons, beams to highlight remarkable gear and inform the user 项…

作者头像 李华
网站建设 2026/6/23 18:12:02

24、Ubuntu系统的多任务处理与性能优化技巧

Ubuntu系统的多任务处理与性能优化技巧 在使用Ubuntu系统时,我们常常会遇到各种多任务处理和性能优化的需求。本文将介绍一些实用的技巧,包括窗口管理、剪贴板优化、任务自动化以及项目跟踪等方面。 动态弹出窗口管理 对于一些动态弹出窗口,如Firefox(网页浏览器)、Evo…

作者头像 李华