RMQ 问题 ST 算法(模板)】的更多相关文章

#include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; ],Min[N][],a[N]; void ST(int *a,int n)//预处理,O(NlogN) { ;i<=n;i++) Min[i][]=Max[i][]=a[i]; ;j<=;j++) { ;i<=n;i++) { <<(j-))<=n) { Max[i][j]=m…
士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果. 所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少. 现在,请你写一个程序,帮小工回答南将军每次的询问吧. 注意,南将军可能询问很多…
·RMQ的ST算法    状态设计:        F[i, j]表示从第i个数起连续2^j个数中的最大值    状态转移方程(二进制思想):        F[i, j]=max(F[i,j-1], F[i + 2^(j-1),j-1])    查询时:        因为这个区间的长度为j - i + 1,所以我们可以取k=log2( j - i + 1),        则有:RMQ(A, i, j)=max{F[i , k], F[ j - 2 ^ k + 1, k]}.…
一.相关定义 RMQ问题 求给定区间的最值: 一般题目给定许多询问区间. 常见问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值. 解决方法 暴力搜索    O(n)-O(n) 线段树 O(n)-O(q*logn) ST算法       O(n*logn)-O(1) 二.ST(Sparse Table)算法 本节介绍了一种比较高效的在线算法(ST算法)解决RMQ问题. ST算法 是一个非常有名的在线处理RMQ问题的算法: 基于D…
目录 一.ST算法 二.ST算法の具体实现 1. 初始化 2. 求出ST表 3. 询问 三.例题 例1:P3865 [模板]ST表 例2:P2880 [USACO07JAN]平衡的阵容Balanced Lineup 一.ST算法 ST算法(Sparse Table Algorithm)是用于解决RMQ问题(区间最值问题,即Range Maximum/Minimum Question)的一种著名算法. ST算法能在复杂度为\(O(NlogN)\)的预处理后,以\(O(1)\)的复杂度在线处理序列区…
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i,j之间的最小/大值.如果只有一次询问,那样只有一遍for就可以搞定,但是如果有许多次询问就无法在很快的时间处理出来.在这里介绍一个在线算法.所谓在线算法,是指用户每输入一个查询便马上处理一个查询.该算法一般用较长的时间做预处理,待信息充足以后便可以用较少的时间回答每个查询.ST(Sparse Table…
比赛当中,常会出现RMQ问题,即求区间最大(小)值.我们该怎样解决呢? 主要方法有线段树.ST.树状数组.splay. 例题 题目描述 2008年9月25日21点10分,酒泉卫星发射中心指控大厅里,随着指挥员一声令下,长征二号F型火箭在夜空下点火起飞,神舟七号飞船载着翟志刚.刘伯明.景海鹏3位航天员,在戈壁茫茫的深邃夜空中飞向太空,开始人类漫步太空之旅.第583秒,火箭以7.5公里/秒的速度,将飞船送到近地点200公里.远地点350公里的椭圆轨道入口.而此时,火箭的燃料也消耗殆尽,即将以悲壮的方…
解决区间查询最大值最小值的问题 用 $O(N * logN)$ 的复杂度预处理 查询的时候只要 $O(1)$ 的时间  这个算法是 real 小清新了   有一个长度为 N 的数组进行 M 次查询 可以查询区间最大值和最小值 #include <iostream> #include <stdio.h> #include <math.h> #include <algorithm> #include <cstdio> using namespace…
/* RMQ(Range Minimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题.当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够.可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值).不过,Sparse_Table算法才是最好的:它可以在O(nlogn)的预处理以后实现O(1)的查询效率.下面把Sparse Table算法分成预处理和查询两部分来说明(以求最小值为例). 预处理: 预处理使用DP的思…
前几天群里看到有人问[JSOI2008]最大数,一道很简单的问题,线段树无脑做,但是看到了动态ST,emmm,学学吧,听大佬说了下思路,还好,不难的: 四道题都可以用其他数据结构或做法代替,例如线段树,dp什么的,但这不重要,毕竟学的就是ST表,触类旁通,数据结构很多知识都是可以互通的,例如一维推广到二维,可持久化这些: 倍增思想,常见的有: 1. 2^(x1)+2^(x2)...2^(xn)=2^n (max{xi}<=logn) 对于正整数x,存在一个二进制表示方法,例如11=1011(2)…