洛谷 P3865 ST表】的更多相关文章

ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到O(nlogn)预处理,O(1)查询最值 是一种处理静态区间可重复计算问题的数据结构,一般也就求求最大最小值辣. ST表的思想是先求出每个[i, i + 2^k)的最值. 注意到这样区间的总数是O(N log N)的. 预处理 不妨令fi,j为[i, i + 2^j)的最小值. 那么首先fi,0的值都是它本身. 而fi,j = min(fi,j−1, fi+2^j−1,j−1) 这样在O(N log N)…
传送门啦 思路: $ f[i][j] $ 表示从 $ i $ 开始,包含 $ 1<<j $ 个元素的区间的区间最大值: 转移方程: $ f[i][j]=max_(f[i][j-1],f[i+(1<<j-1)][j-1] $ ; 查询 $ (l,r) $ : $ p=log_2(r-l+1) $ ; $ max(l,r)=max(f[l][p],f[r-(1<<p)+1][p]) $ ; #include <iostream> #include <cst…
https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为 NN 的数列,和 MM 次询问,求出每一次询问的区间内数字的最大值. 输入输出格式 输入格式: 第一行包含两个整数 N, MN,M ,分别表示数列的长度和询问的个数. 第二行包含 NN 个整数(记为 a_iai​),依次表示数列的第 ii …
P3865 [模板]ST表 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为 NN 的数列,和 MM 次询问,求出每一次询问的区间内数字的最大值. 输入输出格式 输入格式: 第一行包含两个整数 N, MN,M ,分别表示数列的长度和询问的个数. 第二行包含 NN 个整数(记为 a_iai​),依次表示数列的第 ii 项. 接下来 MM行,每行包含两个整数 l_i, r_ili…
题目大意:区间静态最大值 题解:ST表,zkw线段树 ST表: st[i][j]存[i,i+$j^{2}$-1]的最大值,查询时把区间分成两个长度相同的小区间(可重复) #include<cstdio> #include<cctype> using namespace std; const int maxn=100010; int n,m,M; int st[maxn][20],lg[maxn]; inline int max(int a,int b){return a>b?…
我不会ST表 智推推到这个题 发现标签中居然有线段树..? 于是贸然来了一发线段树 众所周知,线段树的查询是log(n)的 题目中"请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)" 然后草草打完代码竟然AC了..exm?? 最慢也不过400ms 数据好水 好吧,不多说上代码 首先是数据存贮,分别是左子节点,右子节点,maxx存贮当前节点的最大值 struct node{ int left,right,maxx; }tree[100000*4+10…
嗯... 题目链接:https://www.luogu.com.cn/problem/P3865 ST(Sparse Table)算法,运用了倍增的思想. 我们令f[i][k]数组表示区间[i, i + 2^k - 1]中的最小值. 显然有递推式: f[i][]=a[i]; f[i][j]=max(f[i][j-],f[i+(<<(j-))][j-]; 查询时: 区间[l, r],求出k=log2(r-l+1).于是可以用f[l][k]和f[r–2^j+1][j]来覆盖这个区间,得到最大值也即…
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入输出格式 输入格式: 整数N(1≤N≤10000000) 输出格式: 表中的第N项 输入输出样例 输入样例#1: 7 输出样例#1: 1/4…
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入输出格式 输入格式: 整数N(1≤N≤10000000) 输出格式: 表中的第N项 输入输出样例 输入样例#1: 7 输出样例#1: 1/4…
题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入描述 Input Description 整数N(1≤N≤10000000) 输出描述 Output Descript…