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

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

时间:2024-08-14 19:49:19浏览次数:14  
标签:RMQ int while ST read 最小值 include getchar


#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++) //枚举区间长度
    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]));
  }
}

建议配合快读

int read() { //fast read
    int x=0,f=1;
    char c=getchar();
    while(c<'0' || c>'9') { //!isdigit(c)
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0' && c<='9') { //isdigit(c)
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}

ST表+快读

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int read() { //fast read
    int x=0,f=1;
    char c=getchar();
    while(c<'0' || c>'9') { //!isdigit(c)
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0' && c<='9') { //isdigit(c)
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}



int f[100005][22];

int main(){
  int n,m; 
  n=read();
  
  
  for(int i=1;i<=n;i++) f[i][0]=read();
  for(int j=1;j<=20;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]);
  m=read();
  for(int i=1,l,r;i<=m;i++){
    l=read();
    r=read();
    int k=log2(r-l+1); //区间长度的指数
    printf("%d\n",max(f[l][k],f[r-(1<<k)+1][k]));
  }
}

标签:RMQ,int,while,ST,read,最小值,include,getchar
From: https://www.cnblogs.com/swjswjswj/p/18359664

相关文章

  • Dllhost.exe 是 Windows 操作系统中的一个进程,通常与 COM+ 服务相关。它的主要作用是
    Dllhost.exe是Windows操作系统中的一个进程,通常与COM+服务相关。它的主要作用是运行COM组件和处理进程间的通信。Dllhost.exe的起源可以追溯到MicrosoftWindows2000和WindowsXP的早期版本。它是Windows操作系统的一部分,主要用于支持COM+(ComponentObjectMode......
  • Python教程(十四):Requests模块详解
    目录专栏列表前言:安装Requests查看包安装情况:RESTful介绍RESTfulAPI设计原则示例基本用法1.查询ID为1的用户(GET)2.创建新用户(POST)3.更新ID为1的用户(PUT)4.删除ID为1的用户(DELETE)响应对象会话(Session)异常处理高级用法流式上传处理重定向使用代理请求超时总......
  • 论文阅读笔记:ST-MetaNet-2
    目录预备知识定义1:城市交通定义2:Geo-graph属性问题1方法RNN元学习器元图注意力网络元循环神经网络预备知识在本节中,我们介绍定义和问题陈述。为简洁起见,我们在表1中提供了一个注释表。假设有个位置,它们报告时间戳上的类型的流量信息。 注:我猜测这里所陈述的......
  • OFtutorial08_customBC解析
    组成prescribedPipeInletFvPatchVectorField.H头文件#ifndefprescribedPipeInletFvPatchVectorField_H#defineprescribedPipeInletFvPatchVectorField_H#include"fvPatchFields.H"#include"fixedValueFvPatchFields.H"#include"Switch.H&qu......
  • 使用diffusers来训练自己的Stable Diffusion 3大模型
    基于diffusers的Stablediffusion训练代码这里给大家介绍一个基于diffusers库来训练stablediffusion相关模型的训练代码,包含Lora、ControlNet、IP-adapter、Animatediff,以及最新的stablediffusion3lora版本的训练代码。现有的一些类似kohya-ss训练器虽然用起来方便,但......
  • CF1383E Strange Operation
    小清新Counting题,想到转化成序列计数后就不难了考虑将一个0/1串等价转化为一个刻画相邻两个\(1\)之间有几个\(0\)的序列比如样例中的\(00101100011100\)就可以转化为\(\{2,1,0,3,0,0,2\}\)这个序列,显然转化后的序列和原来的0/1串等价考虑此时一次操作相当于将序......
  • docker-swarm test
    DockerService(服务)是用于定义和管理单个容器服务的概念。 DockerCompose,它是用来进行一个完整的应用程序相互依赖的多个容器的编排的,但是缺点是不能在分布式多机器上使用; Dockerswarm,它构建了docker集群,并且可以通过dockerservice在不同集群节点上运行容器服务,但是缺点......
  • SQL中exists和in的用法以及区别
    SQL中exists和in的用法以及区别  目录一、in用法二、exists用法三、in与exists的区别in语句:只执行一次exists语句:执行n次(外表行数)区别和应用场景notin和notexists四、结论 一、in用法in 语法为:select*fromtable_namewherecol_namei......
  • 《python程序语言设计》2018版第7章第2题创建一个stock类,一个公司股票。创建stock,包含
    使用百分比法计算股票变化值百分比法是计算股票变化值的常用方法。具体操作是:将当前股票价格与前一交易日的股票价格进行比较,计算出价格变动的百分比。公式为:(当前价格-前一交易日价格)/前一交易日价格×100%。这种方法简单明了,可以快速得出股票变化的百分比。......
  • Mysql 中Exists
    existsexists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录;反之,如果exists里的条件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件......