首页 > 其他分享 >ST表 RMQ(区间最大/最小值查询)问题

ST表 RMQ(区间最大/最小值查询)问题

时间:2023-12-12 18:44:05浏览次数:35  
标签:RMQ 查询 int ST 最小值 区间 include

主要应用倍增思想
预处理:O(nlogn) 查询:O(1)
f[i][j]是以i为起点,长度为2j的区间中的最大值(一个点一个单位长度,不是一条线段)
区间终点:i+2j-1<=n
区间长度的指数k=log2(r-l+1),只有当r-l+1为2n-1时是恰好分割,其他时候有重叠,但问题不大

代码

 

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

int f[100005][22];

int main(){
  int n,m; scanf("%d%d",&n,&m);
  
  for(int i=1;i<=n;i++) scanf("%d",&f[i][0]);
  for(int j=1;j<=20;j++) //枚举区间长度,应该是由logn决定
    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]);
  
  for(int i=1,l,r;i<=m;i++){
    scanf("%d%d",&l,&r);
    int k=log2(r-l+1); //区间长度的指数
    printf("%d\n",max(f[l][k],f[r-(1<<k)+1][k]));
  }
}

凡是符合结合律且可重复贡献的信息查询都可以使用ST表。
例如最大值、最小值、最大公因数、最小公倍数、按位或、按位与都符合
ST表不可进行修改操作,要修改得换线段树

标签:RMQ,查询,int,ST,最小值,区间,include
From: https://www.cnblogs.com/modemingzi-csy/p/17897583.html

相关文章

  • 无涯教程-MFC - List Control函数
    列表视图控件的功能,该控件显示项目的集合,每个项目由一个图标和一个标签组成,它由CListCtrl类表示,列表控件包括使用以下视图显示项目列表。IconsSmallIconsListReport让无涯教程通过创建一个新的基于MFC对话框的应用程序来研究一个简单的示例。步骤1-删除TODO行并拖动一......
  • 2023-12-12 双十二思考借钱给steve的事
    2023-12-12   2014年投资了3.8W合伙成立半山腰。这个事情也怪我当初,我看Sw总要创业,做的事情又是有经验的,投资一点,以后赚了就跟着赚一点,亏了我也认栽。从一开始,就没有想过投资2~3万,要他回报给我2~300万。能赚个10几万,我觉得就很不错了。后面就很多年里,应该有7~8年,每年都问我......
  • openresty动态解析域名
    废话不多说直接上代码usernobody;worker_processesauto;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{worker_connections100000;}http{include......
  • AtCoder Grand Contest 001
    比赛链接A-BBQEasy从小到大排序以后,答案就是所有奇数位置之和。B-MysteriousLight发现去掉前两次反射以后,剩下的是一个在平行四边形内反射的过程,且形式类似于辗转相除。具体地,\[F(n,x)=\begin{cases} -n&x=0\\ 2x\lfloor\frac{n}{x}\rfloor+F(x,n\bmodx)&x>0\e......
  • pure-admin pnpm  ERR_PNPM_FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE  Cannot perf
    事情是这样的,用的开源pure-admin的框架,用的是pnpm,本地环境都是可以的,但是发布到生成就报以下错误  然后看部署参数,是这样的,强制用了lock文件,本来也没问题 报错的意思是json文件跟pnpm-lock.json文件不匹配但是本地看着是匹配的,随便挑选几个包版本看着也是一致的然后......
  • Nginx——记录post请求回执405的一种解决方式
    前言:nginx做反向代理,一直报405,由于之前配置过,一直是没问题的,这次一直报405,搞了一下午,终于找到原因了是因为开启了多个ngixn导致的。解决办法:cmd杀掉nginx后台进程命令杀掉nginx后台nginx常用命令taskkill/f/t/imnginx.exenginx 常用命令startnginx#启动Ng......
  • DDS(Data Distribution Service) 数据分发服务
    DDS是一个以数据为中心的中间件协议和API标准,意为用户只关心自己想要的数据,数据通过Topic进行标识,这样发布者根据主题发布数据,订阅者根据自己感兴趣的主题订阅数据。这便是DDS的核心,以数据为中心的发布-订阅模型DCPS(Data-CentricPublish-Subscribe)如果是熟悉的以服务为中心的SOM......
  • nodejs的http.request最大响应体
    nodejs的http.request躺坑记录1、http.request之response.on("data",(chunk:Buffer)=>{})的chunk大小​ 由于nodejs的response.on("data")每次从服务端读取的chunk大小最大是65535Byte,并且查很多网站都找不大这个说明点所以狠狠踩了这个坑。这个65535有什么影响呢。本来编写的......
  • 【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、Status
    原文链接:https://blog.csdn.net/QH2107/article/details/1341922511.MenuStripMenuStrip作为一个容器可以包含多个菜单项。MenuStrip的重要属性包括:Name:菜单的名字Dock:菜单的停靠位置Items:菜单项的集合ToolStripMenuItemToolStripMenuItem是MenuStrip中的菜单项,可以有以下......
  • pytest 如何测试函数中抛出的异常
    一般Python中异常可以用raise来抛出,此时单测中想要测试错误用例是否触发异常了,可以用pytest中的 withpytest.raises(xxx)如下:importpytestimportunittestclassInfo(object):"""infoclass"""def__init__(self,name):"""......