news 2026/4/18 7:23:05

[模板]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/18 0:30:00

打造智能机器狗:openDogV2开源机器人开发全攻略

打造智能机器狗&#xff1a;openDogV2开源机器人开发全攻略 【免费下载链接】openDogV2 项目地址: https://gitcode.com/gh_mirrors/op/openDogV2 你是否梦想过亲手打造一台能够自主感知环境、智能决策的机器狗&#xff1f;openDogV2项目将这个梦想变成了现实&#xff…

作者头像 李华
网站建设 2026/4/18 0:26:51

1、PF 网络配置与使用指南

PF 网络配置与使用指南 1. 关于网络构建与 PF 概述 在网络构建中,防火墙及相关功能是关键环节。我们将从基础理论入手,结合过滤和网络流量引导的实例来探讨。这里假设你具备 TCP/IP 网络概念和 Unix 管理的基础到中级知识。 需要注意的是,网络配置的方法并非唯一,且自相…

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

7、网络配置与管理:从基础到高级应用

网络配置与管理:从基础到高级应用 1. 无线网络轻松配置 在无线网络环境中,不同用户的需求和权限可以通过规则文件进行灵活配置。 1.1 用户规则示例 Windows 用户 Peter :仅需浏览网页并访问特定机器上高端口的服务,可在 /etc/authpf/users/peter/authpf.rules 文件中…

作者头像 李华
网站建设 2026/4/18 0:25:21

视频生成终极指南:如何用AI技术实现高质量720P视频创作

还在为制作高质量视频而烦恼吗&#xff1f;&#x1f914; 传统的视频制作不仅耗时耗力&#xff0c;还需要专业的技术和设备支持。现在&#xff0c;借助Wan2.1-FLF2V-14B-720P-diffusers模型&#xff0c;AI视频创作已经变得触手可及&#xff01;这款14B参数的强大模型让消费级GP…

作者头像 李华