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


#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]));
}
}
ST表 RMQ问题(区间最大/最小值查询)的更多相关文章
- POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】
传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS Memory Limit: 65536K Total S ...
- 【RMQ】 区间最值查询详解
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...
- ST表 || RMQ问题 || BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队 || Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup
题面:P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解: ST表板子 代码: #include<cstdio> #include<cstring&g ...
- Find the hotel HDU - 3193 (ST表RMQ)
Summer again! Flynn is ready for another tour around. Since the tour would take three or more days, ...
- RMQ 区间最大值 最小值查询
/*RMQ 更新最小值操作 By:draymonder*/ #include <iostream> #include <cstdio> using namespace std; ...
- cf689d ST表RMQ+二分
类似hdu5289,但是二分更复杂.本题枚举左端点,右端点是一个区间,需要二分找到区间的左端点和右端点(自己手动模拟一次),然后区间长度就是结果增加的次数 另外结果开long long 保存 /** ...
- Balanced Lineup 倍增思想到ST表RMQ
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 36864 Accepted: 172 ...
- hdu2888 二维ST表(RMQ)
二维RMQ其实和一维差不太多,但是dp时要用四维 /* 二维rmq */ #include<iostream> #include<cstring> #include<cs ...
- RMQ求区间最大最小值
#include<iostream> #include<cmath> #include<cstdio> #define N 50005 using namespac ...
- Max answer(单调栈+ST表)
Max answer https://nanti.jisuanke.com/t/38228 Alice has a magic array. She suggests that the value o ...
随机推荐
- 重拾 SSH:从基础到安全加固
安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,属于应用层协议.OpenSSH 是最流行的 SSH 实现,它是大量操作系统的默认组件 OpenSSH 套 ...
- 原生input上传视拼,参数形式 file: (binary)形式的
<input type="file" @change="demo"> if(e.target.files[0]&&e.target. ...
- 关于SpringBoot的测试类中运行时报空指针异常
1. 首先给出我所遇到的问题源代码 一直会报错 java.lang.NullPointerException: Cannot invoke "com.course.rainngcourseb ...
- deepseek等AI工具是程序员技能发展的双刃剑
2025年,全球已有73%的程序员日常使用AI编码工具(Gartner 2025Q1数据).当我们惊叹于GitHub Copilot生成完整功能模块仅需10秒时,也需要警惕一个现象:新一代程序员在ID ...
- Git钩子-每次提交信息添加分支名称
Git钩子是一组脚本,这些脚本对应着Git仓库中的特定事件,每一次事件发生时,钩子会被触发.这允许你可以定制化Git的内部行为,在开发周期中的关键点上触发执行定制化的脚本. 钩子脚本文件通常放置于项目 ...
- [ABC297F] Minimum Bounding Box 2 题解
容斥真有趣. 有一个性质: 两个相同的子矩阵,对答案的贡献一定相同. 所以就只需要枚举矩阵大小即可. 我们设当前矩阵长 \(i\) 宽 \(j\)(对应的,\(H\) 为长,\(W\) 为宽),假如要 ...
- Linux - centos6忘记root密码怎么办?
Linux的root密码修改不像Windows的密码修改找回,Windows的登录密码忘记需要介入工具进行解决.CentOS6和CentOS7的密码方法也是不一样的,具体如下 1.开机按esc 2 ...
- 面试题40. 最小的k个数
地址:https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/ <?php /** * 面试题40. 最小的k个数 * 输入整数数组 ...
- 【目标检测】二、Fast R-CNN与SVD
1.流程 (1) 空间金字塔池化(spatial pyramid pooling,SPP) 原理: (2)Fast-RCNN 2.数学概念 这么多个全连接层,必然存在计算的性能问题,让数学家们蠢蠢欲动 ...
- 在Linux系统下验证万兆网络(10Gbps)的性能和配置情况,可以通过多种方法来实现
在Linux系统下验证万兆网络(10Gbps)的性能和配置情况,可以通过多种方法来实现.以下是一些常用的步骤和工具: 1. 确认硬件支持 首先,确保您的计算机硬件支持万兆网络.这包括: 网卡:确认您的 ...