RMQ(ST表)
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int N, M, a[100009], l, r, st[100009][20];
inline int read()
{
	int s=0, w=1; char ch=getchar();
	while( ch<'0' || ch>'9' ){ if(ch=='-') w=-1; ch=getchar(); }
	while(ch>='0' && ch<='9'){ s=s*10+ch-'0';	 ch=getchar(); }
	return s*w;
}
void pre()										//预处理求st表
{
	for(register int i=1; i<=N; i++) st[i][0]=a[i];
	for(int k=1; (1<<k)<=N; k++)
		for(register int i=1; i<=N; i++)
		{
			if(i+(1<<k)-1>N) break;
			st[i][k]=max(st[i][k-1], st[i+(1<<(k-1))][k-1]);
		}
}
int maxf(int l, int r)							//区间划分与求值
{
	if(l==r) return st[l][0];
	int t=log(r-l)/log(2);						//注意在Linux下log计算可能存在的潜在问题
	return max(st[l][t], st[r-(1<<t)+1][t]);
}
int main()
{
	N=read(), M=read();
	for(register int i=1; i<=N; i++) a[i]=read();
	pre();
	for(register int i=1; i<=M; i++) l=read(), r=read(), printf("%d\n", maxf(l, r));
	return 0;
}
												
											RMQ(ST表)的更多相关文章
- RMQ——ST表
		
ST表 ST表是一种解决RMQ问题的强有力工具, 可以做到O(nlogn)预处理,O(1)查询. st[i][j] 表示区间 [i, i + 2 ^ j - 1] 的最大值. 初值 st[i][0] ...
 - hdu6356 Glad You Came 杭电多校第五场 RMQ ST表(模板)
		
Glad You Came Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
 - RMQ—ST表
		
RMQ(Range Minimum/Maximum Query),RMQ是一个求给定范围内最大最小值的问题.我们一般使用st算法来解决这类问题(Sparse Table).这个算法原理不难,主要是各种 ...
 - 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)
		
题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...
 - RMQ问题 - ST表的简单应用
		
2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值 ...
 - 算法学习 - ST表 - 稀疏表 - 解决RMQ问题
		
2017-08-26 21:44:45 writer:pprp RMQ问题就是区间最大最小值查询问题: 这个SparseTable算法构造一个表,F[i][j] 表示 区间[i, i + 2 ^ j ...
 - POJ 3264 Balanced Lineup 【ST表 静态RMQ】
		
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
 - [poj3264]rmq算法学习(ST表)
		
解题关键:rmq模板题,可以用st表,亦可用线段树等数据结构 log10和log2都可,这里用到了对数的换底公式 类似于区间dp,用到了倍增的思想 $F[i][j] = \min (F[i][j - ...
 - 【模板】RMQ问题的ST表实现
		
$RMQ$问题:给定一个长度为$N$的区间,$M$个询问,每次询问$[L_i,R_i]$这段区间元素的最大值/最小值. $RMQ$的高级写法一般有两种,即为线段树和$ST$表. 本文主要讲解一下$ST ...
 - Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树
		
思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用 lazy=0 没被覆盖过 els ...
 
随机推荐
- 让 Windows7 - 64bit 支持 VC++ 6.0 的解决方法(无法启动此程序,因为计算机中丢失 MSVCRTD.dll。尝试重新安装该程序以解决此问题)
			
源地址:https://www.cnblogs.com/poissonnotes/p/4372136.html 无法启动此程序,因为计算机中丢失 MSVCRTD.dll.尝试重新安装该程序以解决此问题 ...
 - docker-compose编排项目redis容器实现主从复制
			
一.pip管理工具安装 docker-compose是python项目,所以安装需要通过python下的包管理工具pip安装.一般linux服务器都会预安装有python环境,所以优先检查python ...
 - docker容器日志收集方案(方案四,目前使用的方案)
			
先看数据流图,然后一一给大家解释  这个方案是将日志直接从应用代码中将日志输出到redis中(注意,是应用直接连接redis进行日志输出),redis充当一个缓存中间件有一定的缓存能力,不过有限,因 ...
 - Vue SSR: 基本用法 (二)
			
上一篇讲解了ssr的原理,这篇主要讲基本用法: 1.安装 npm install vue vue-server-renderer --save 我们将在整个指南中使用 NPM,但你也可以使用 Yarn ...
 - SQL CREATE INDEX 语句
			
CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只 ...
 - 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll
			
关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...
 - PHP性能优化:in_array和isset 在大数组查询中耗时相差巨大,以及巧妙使用array_flip
			
今天在PHP业务开发中,发现了一个问题. 两个较大数组(20万+元素),遍历其中一个$a,另一个数组$b用于查找元素. 比如 foreach($a as $val){ if(in_array($xx, ...
 - [Oracle运维工程师手记] 如何从trace 文件,判断是否执行了并行
			
[Oracle运维工程师手记系列]如何从trace 文件,判断是否执行了并行 客户说,明明指定了并行的hint,OEM 却报说没有并行,并且提供了画面. 客户的SQL文长这样: INSERT/*+ p ...
 - 服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
			
[前言] Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butt ...
 - docker 小技巧 docker network create br-name 指定IP地址
			
在某些情况下,使用 docker network create br-name 命令创建网络的时候,会创建一个新的网桥,该网桥的默认IP地址为172.18.0.0\16(或相临的IP地址段) 这个ip ...