RMQ问题--ST
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn = 1e5+;
int f[maxn][];
int n,m;
inline int RMQ(int l,int r){
int k = log2(r-l+);
return min(f[l][k],f[r-(<<k)+][k]);
}
inline void ST(){
for(int j = ;j <= ;j++)
for(int i = ;i <= n;i++)
if(i+(<<j)- <= n)
f[i][j] = min(f[i][j-],f[i+(<<(j-))][j-]);
}
int main(){
cin>>n>>m;
for(int i = ;i <= n;i++)
scanf("%d",&f[i][]);
ST();
for(int i = ,x,y;i <= m;i++){
scanf("%d%d",&x,&y);
printf("%d ",RMQ(x,y));
}
return ;
}
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 1e5+;
int a[maxn],f[maxn][],log[maxn];
int n,m;
inline int RMQ(int l,int r){
int k = log[r-l+];
return min(f[l][k],f[r-(<<k)+][k]);
}
inline void ST(){
log[] = -;
for(int i = ;i <= n;i++){
f[i][] = a[i];
log[i] = log[i>>]+;
}
for(int j = ;j <= log[n];j++)
for(int i = ;(i+(<<j)- <= n) && (i <= n);i++)
f[i][j] = min(f[i][j-],f[i+(<<j-)][j-]);
}
int main(){
cin>>n>>m;
for(int i = ;i <= n;i++)
scanf("%d",&a[i]);
ST();
for(int i = ,x,y;i <= m;i++){
scanf("%d%d",&x,&y);
printf("%d ",RMQ(x,y));
}
return ;
}
RMQ问题--ST的更多相关文章
- RMQ的ST算法
·RMQ的ST算法 状态设计: F[i, j]表示从第i个数起连续2^j个数中的最大值 状态转移方程(二进制思想): F[i, j]=max(F[i,j-1], ...
- 线段树(two value)与树状数组(RMQ算法st表)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- RMQ(ST算法)
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i ...
- RMQ之ST算法模板
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; ],M ...
- RMQ问题ST算法 (还需要进一步完善)
/* RMQ(Range Minimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题.当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的 ...
- RMQ 问题 ST 算法(模板)
解决区间查询最大值最小值的问题 用 $O(N * logN)$ 的复杂度预处理 查询的时候只要 $O(1)$ 的时间 这个算法是 real 小清新了 有一个长度为 N 的数组进行 M 次查询 可 ...
- 模板 RMQ问题ST表实现/单调队列
RMQ (Range Minimum/Maximum Query)问题是指: 对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,R ...
- HDU 2586 How far away ?(经典)(RMQ + 在线ST+ Tarjan离线) 【LCA】
<题目链接> 题目大意:给你一棵带有边权的树,然后进行q次查询,每次查询输出指定两个节点之间的距离. 解题分析:本题有多重解决方法,首先,可用最短路轻易求解.若只用LCA解决本题,也有三种 ...
- RMQ问题 - ST表的简单应用
2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值 ...
- RMQ问题+ST算法
一.相关定义 RMQ问题 求给定区间的最值: 一般题目给定许多询问区间. 常见问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大 ...
随机推荐
- FastDFS-基本介绍
1. 什么是FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用Fas ...
- 太白金星的考验----python while循环的执着
我们知道 while循环的使用意味着 反复的执行一些操作,而且在while循环体中 从第一行代码执行到最后一行代码,(请您务必留心这句话!) 直到不再满足while后面给出的限定条件,才结束循环跳出到 ...
- [一道区间dp][String painter]
http://acm.hdu.edu.cn/showproblem.php?pid=2476 String painter Time Limit: 5000/2000 MS (Java/Others) ...
- C# Dynamic动态对象
1.ExpandoObject dynamic expObj = new ExpandoObject(); expObj.FirstName = "Daffy"; expObj.L ...
- 在使用Telnet连接localhost时所遇到的问题:出现 ‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件
1.出现 ‘telnet’ 不是内部或外部命令,也不是可运行的程序或批处理文件.原因:因为本机的Telnet客户端默认是关闭的,所以我们要手动打开解决方案:打开控制面板–>程序–>打开或关 ...
- vue的一些随笔
一.点击路由后的样式,可以在路由文件index.js中设置 再在样式里面设置active的类名对应的样式. ———————————————————————————————————————————— 二 ...
- ajax调用c#后端,发现参数没数值
之前是int的数据,名字是id 后面被改成字符串的数据,名字是encrptedId 因为名字不匹配,导致找不到数值.只需要把js里调用传递的参数名字改一下,或者C#后端,继续保持原来的名字
- Linux 时间同步 Chrony
chrony 是网络时间协议(NTP)的通用实现. chrony 包含两个程序:chronyd 是一个可以在启动时启动的守护程序.chronyc 是一个命令行界面程序,用于监视 chronyd 的性能 ...
- spring项目启动错误——java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
最近在搭spring项目框架的时候,遇到一个很伤的问题,翻了很多帖,都报告说什么少spring-context包啊之类的,但实际上spring的那些依赖我根本没漏,下面是我的pom: <depe ...
- python 调用父类方法, 重写父类构造方法, 不显式调用,会报错
子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和父类都有构造函数,子类其实是重写了父类的构造函数,如果不显式调用父类构造函数,父类的构造函数就不会被执行,导致子类 ...