一: 区间问题:什么时候用线段树,什么时候用ST 如果需要动态维护,需要添加或者删除,那么就必须用到线段树,线段树的单次查询时间为O(logn),如果查询量大还是很浪费时间。 在不需要动态维护的时候,ST算法的查询速度可以到达O(1) 二: 【什么样的问题适合ST算法】例如,RMQ问题和RGQ问题适 ...
分类:
其他好文 时间:
2020-02-07 14:42:26
阅读次数:
76
题目描述: 分析: 看到题目:后缀数组,二分,加加减减 然后。。。然后。。。 “后缀数组是个好东西,我有头发的时候天天写。” 我们首先要求出二分的区间,可能二分到所有子串字典序编号 二分的过程当中,首先先找出字典序当前值得字符串,这里要用到height数组RMQ 我们现在就需要将所有字典序大于该子串 ...
分类:
其他好文 时间:
2020-01-30 21:03:45
阅读次数:
49
RMQ是询问某个区间内的最大值或最小值的问题,ST算法可以求解RMQ问题.ST算法通常用在要多次询问某一些区间的问题中,相比于线段树,它的程序实现更加简单,运行速度更快,它可以做到O(nlogn)的预处理,O(1)回答每个问题.使用ST算法的条件是没有修改操作,因此它适用于没有修改操作并且访问次数较多(10^6级别甚至更大)的情况.1.预处理ST算法的原理实际上是动态规划,首先要知道f数组的含义,
分类:
编程语言 时间:
2020-01-24 10:57:33
阅读次数:
101
ST算法能在O(NlogN)时间内对数列a预处理, 以O(1)的时间复杂度在线回答”数列a中下标在l~r之间的数的最大(小)值是多少“预处理:1)f[i][j]表示数列a中下标在子区间[i,i+2^j-1]里的数的最大(小)值, 即i开始的2^j个数的最大(小)值2)f[i][j]=max(f[i] ...
分类:
编程语言 时间:
2020-01-23 21:16:13
阅读次数:
130
ST算法能在O(NlogN)时间内对数列a预处理,以O(1)的时间复杂度在线回答“数列a中下标在l~r之间的数的最大(小)值是多少预处理:f[i][j]表示数列a中下标在子区间[i,i+2^j-1]里的数的最大(小)值,即i开始的2^j个数的最大(小)值f[i][j]=max(f[i][j-1],f ...
分类:
编程语言 时间:
2020-01-23 19:48:21
阅读次数:
81
源自 xyz32768 菜鸡的 FJ 省冬令营模拟赛题 原题 "CF1063F" Statement 给定一个长度为 $n$ 的字符串 $s$,仅包含小写英文字母 要从中从左往右选出若干段不相交的子串 使得选出的这些串中,每个串都是上一个串的严格子串 求最多能选出多少段 $1\le n\le5\ti ...
分类:
其他好文 时间:
2020-01-23 12:39:07
阅读次数:
95
int lca(int x,int y) { if(de[x]<de[y]) swap(x,y); int d=de[x]-de[y]; for(int i=log2(d);i>=0;i--) { if(d&(l<<i)) { x=fa[x][i]; } } for(int i=log2(n);i> ...
分类:
其他好文 时间:
2020-01-20 20:36:20
阅读次数:
65
今天学弟在群里直播讲课,讲了RMQ,以前摸鱼太多这个题目并没看出来是啥,然后就去凑了个热闹。 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ ...
分类:
其他好文 时间:
2020-01-14 10:15:01
阅读次数:
100
题目 https://vjudge.net/problem/Gym-102091A 题意 从左到右给出 n 个位置固定机场和 m 个询问,每个机场有自己的高度 H,每个飞机只能向高度比原高度小的地方飞,并且途中不能经过大于等于原高度的位置。询问给出两个参数 u,v。 当 v ! = 0 时,从 u, ...
分类:
其他好文 时间:
2020-01-13 21:53:09
阅读次数:
87
一, 给定一个区间,求所有区间长度为L的区间的最大值和最小值 二, 该题有很多做法。 自然用的是滑动窗口(单调队列) 可能的做法: O(nlogn)的线段树 O(nlogn)的带删除优先队列(对顶堆) 还能再快一点吗? O(n)-O(1)RMQ代替线段树 三, 单调队列和单调栈的意思一样,始终要你维 ...
分类:
其他好文 时间:
2019-12-14 19:36:17
阅读次数:
140