求区间的最大值(RMQ、线段树)

题目描述:

有n个数,给你m个询问,每次询问给你A,B个数,要求你编写程序求出[A,B]这个区间中的最大值。

输入格式:

第一行一个整数 N表示数字的个数。

接下来一行为 N个数,表示数字序列。

第三行读入一个 M,表示你看完那串数后需要被提问的次数。

接下来 M行,每行都有两个整数 A,B。

输出格式:

输出共 M行,每行输出一个数,表示对一个问题的回答。

数据范围:

1≤N≤2×10^5,
1≤M≤10^4,
1≤A≤B≤N。

法一:RMQ

#include<iostream>
#include<cmath>
using namespace std;
const int N=2e5+5,M=18;
int w[N],n,m,f[N][M];
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>w[i];for(int j=0;j<M;j++)//枚举区间长度for(int i=1;i+(1<<j)-1<=n;i++) //枚举起点if(!j) f[i][j]=w[i];else f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);cin>>m;while(m--){int a,b;cin>>a>>b;int len=b-a+1;int k=log(len)/log(2);cout<<max(f[a][k],f[b-(1<<k)+1][k])<<endl;}
}

法二:线段树

#include<iostream>
using namespace std;
const int N=2e5+5;
int w[N],n,m;
struct node{int l,r;int max_;
}tr[4*N];
void pushup(int u)
{tr[u].max_=max(tr[u<<1].max_,tr[u<<1|1].max_);
}
void build(int u,int l,int r)
{if(l==r) tr[u]={l,l,w[r]};else{tr[u]={l,r};int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);}
}
int query(int u,int l,int r)
{if(tr[u].l>=l&&tr[u].r<=r) return tr[u].max_;else{int mid=tr[u].l+tr[u].r>>1;int v=-1e9;if(mid>=l) v=max(v,query(u<<1,l,r));if(mid<r) v=max(v,query(u<<1|1,l,r));return v;}
}
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>w[i];build(1,1,n);cin>>m;while(m--){int l,r;cin>>l>>r;cout<<query(1,l,r)<<endl;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git指令reset的参数soft、mixed与hard三者之间的区别

主要内容 reset默认不写参数&#xff0c;与使用mixed参数含义一样 为了描述简洁&#xff0c;使用下图说明&#xff1a; #mermaid-svg-LtChquRXlEV1j6og {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LtChquRXlEV1j…

实现简易可视化拖拽生成页面

1.背景 由于一些简单、重复的页面&#xff0c;需要开发&#xff0c;会耗费大量人力和物力。因此一般会利用低代码平台&#xff0c;进行拖拽生成&#xff0c;下面就是实现简易可视化拖拽生成页面 2 简易可视化拖拽生成页面具体实现 2.1 整体页面布局 整个页面分为顶栏、内容区…

react native使用TS实现路由

一、入口文件app.jsx的配置 入口文件最好还是要保留jsx import { NavigationContainer } from react-navigation/native; import { navigationRef } from "./src/views/RootNavigation";const App () > {return&#xff08;<NavigationContainer ref{navigat…

递增三元组 刷题笔记

题意为 若存在 a中的数小于b中的数&#xff0c;b中的数小于c中的数 则该数算一种方案 思路 暴力模拟优化 两层循环遍历即可 从b到c的过程我们发现 第三层并不需要循环 直接加上 大于b的数量即可 那么第一层和第三层是对称的 我们有没有可能再去掉一层循环 只做一次遍历 …

238.除自身以外数组的乘积

题目&#xff1a;给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且…

java后端修改日期格式

有了他再也不用加JsonFormat了 第一步继承WebMvcConfigurationSupport类 实现其中方法 package com.sky.config;import com.sky.interceptor.JwtTokenAdminInterceptor; import com.sky.interceptor.JwtTokenUserInterceptor; import com.sky.json.JacksonObjectMapper; impo…

JS原型链的面试题

题目1 function Person(name) {this.name name; }Person.prototype.greet function() {console.log(Hello, my name is this.name); };function Student(name, grade) {Person.call(this, name);this.grade grade; }Student.prototype Object.create(Person.prototype);…

linux系统容器搭建redis集群

容器搭建redis集群 安装redis集群三主三从redis集群搭建主从容错切换迁移数据读写存储容错切换迁移 主从扩容主从缩容 安装redis集群 三主三从redis集群搭建 cluster集群模式 哈希槽分区进行亿级数据存储关闭防火墙&#xff0c;启动docker systemctl start docker新建6个redi…

高项--价值驱动的项目管理知识体系

说要参加软考已经过去两周了&#xff0c;到现在也没啥成果&#xff0c;今天决定还是动手记录小一些东西吧&#xff0c;也方便下次打开手机的时候可以查看记忆。总体上看可以分为三个部分&#xff1a;信息技术、项目管理、法律法规&#xff0c;而项目管理里面最终要的就是这个项…

Oracle 12c dataguard查看主备库同步情况的新变化

导读 本文介绍Oracle 12c dataguard在维护方面的新变化 前提&#xff1a;主库备库的同步是正常的。 1、主库上查看archive Log list SYScdb1> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination…

JMM(Java Memory Model)内存模型

Java内存模型&#xff0c;规范了计算机内存与java虚拟机之间的协调工作&#xff0c;即规定了 将java 虚拟机中的变量存储到内存中和从内从中取出来的内存细节。 Java内存模型中规定了所有的变量都存储在内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程对变量的…

【SpringCloud微服务实战03】Nacos 注册中心

一、Nacos安装 官方文档安装Nacos教程:Nacos 快速开始 这里安装的是1.4.7版本,安装之后访问http://127.0.0.1:8848/nacos 管理界面如下:(用户名:nacos,密码:nacos) 二、Nacos服务注册和发现 1、在父工程中配置文件pom.xml 中添加spring-cloud-alilbaba的管理依赖:…

如何快速制作电商效果图?

我们都知道&#xff0c;做电商&#xff0c;你的产品效果是很重要&#xff0c;有些产品只要看一眼&#xff0c;消费者就想着加入购物车或者购买。 想快速制作电商效果图&#xff0c;我们可以借助以下几个方法。 1、使用电商模版 网上有很多免费和付费的电商效果图模板,&#x…

基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案

产品概述 公司推出基于瑞芯微RK3588架构的AI边缘计算主板&#xff0c;RK3588是新一代国产旗舰高性能64位八核处理器&#xff0c;采用8nm工艺&#xff0c;具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76四核A55的八核CPU和ARM G610MP4 GPU&#xff0c;内置6…

顺序表详解

顺序表是最简单的一种数据结构之一&#xff0c;它的本质上就是数组&#xff0c;我们将顺序表分为静态和动态的两种形式&#xff0c;静态顺序表只能存储有限个数据&#xff0c;而动态顺序表可以根据自己的需求来开辟空间存储数据。 下面是静态顺序表的结构&#xff0c;本质上就是…

一文了解Spring的SPI机制

文章目录 一文了解Spring的SPI机制Java SPIServiceLoader Spring SPISpringboot利用Spring SPI开发starter 一文了解Spring的SPI机制 Java SPI SPI 全称 Service Provider Interface &#xff0c;是 Java提供的一套用来被第三方实现或者扩展的接口&#xff0c;它可以用来启用…

vue 使用element plus 菜单时,折叠文字不消失

问题&#xff1a; 菜单折叠时&#xff0c;title文本无法消失&#xff0c;同时下拉箭头还会存在 解决方法&#xff1a; 查看项目中是否有div标签 原因 div和p标签都是块级元素&#xff0c;可能是这个原因 所以把项目中的p标签改为span标签 div改为template即可解决

IDEA编写各种WordCount运行

目录 一、编写WordCount(Spark_scala)提交到spark高可用集群 1.项目结构 2.导入依赖 3.编写scala版的WordCount 4.maven打包 5.运行jar包 ​6.查询hdfs的输出结果 二、本地编写WordCount(Spark_scala)读取本地文件 1.项目结构 2.编写scala版的WordCount 3.编辑Edit …

SSM整合项目(删除家居 + 分页查询)

1.删除家居 1.需求分析 2.编写Service层 1.FurnService.java 添加方法 //删除家居public void del(Integer id);2.FurnServiceImpl.java 实现方法 Overridepublic void del(Integer id) {furnMapper.deleteByPrimaryKey(id);}3.单元测试 Testpublic void del() {furnService.…

微信公众号调用沙箱支付

沙箱支付 登录支付宝开放平台&#xff0c;选择底部沙箱支付 下载密钥生成工具 生成应用私钥与公钥&#xff0c;上传沙箱支付&#xff0c;获得支付宝公钥 配置支付通知与支付回调地址 SpringBoot配置 yml文件 这里的地址必须与沙箱配置的一样 controller package com.zq…