题意
给你一大串数字(编号为 $1$ 到 $N$,大小可不一定哦!),在你看过一遍之后,它便消失在你面前,随后问题就出现了,给你 $M$ 个询问,每次询问就给你两个数字 $A,B$,要求你瞬间就说出属于 $A$ 到 $B$ 这段区间内的最大数。
思路
典型的RMQ模板题啦。
先把一开始的一大串数字塞入RMQ。然后询问就好啦。没有一点坑。。。
1 | #include<algorithm> |
给你一大串数字(编号为 $1$ 到 $N$,大小可不一定哦!),在你看过一遍之后,它便消失在你面前,随后问题就出现了,给你 $M$ 个询问,每次询问就给你两个数字 $A,B$,要求你瞬间就说出属于 $A$ 到 $B$ 这段区间内的最大数。
典型的RMQ模板题啦。
先把一开始的一大串数字塞入RMQ。然后询问就好啦。没有一点坑。。。
1 | #include<algorithm> |
FJ 准备了 $Q$ 个可能的牛的选择和所有牛的身高。他想知道每一组里面最高和最低的牛的身高差别。
典型的RMQ模板题啦。
先把一开始的一大串数字塞入RMQ。然后询问就好啦。没有一点坑。。。
注意RMQ2次就好了啊
1 | #include<algorithm> |
首先,他们面前会有一排共 $n$ 个数,它们比赛看谁能最先把每连续 $k$ 个数中最大和最小值写下来,当然,这些机器人运算速度都很快,它们比赛的是谁写得快。
模板题。不介绍。
RMQ问题分别做一个最大值与最小值。
1 | #include<algorithm> |
定义完美序列:一段连续的序列满足序列中的数互不相同。
想知道区间 $[L,R]$ 之间最长的完美序列长度。
设$las[x]$表示盈利$x$最近出现位置。
设$st[i]$表示以第$i$个数结尾的最长完美序列的起始位置。
$$
st[i]=max(st[i-1],las[a[i]+1])
$$
设$f[i]$表示以第$i$个数结尾的最长完美序列的长度
$$
f[i]=i-st[i]+1
$$
由$st$的递推式可知,$st$的值是一个非递减的序列。
对于一个询问区间$[l_i,r_i]$,该区间内的$st$值可能会有两种情况:
由于$st$的值具有单调性,所以这个边界可以通过二分得到。设求出的边界为$mid$_i,可得:
$$
st[l_i…mid_i-1]<l_i
$$
$$
st[mid_i…r_i]\ge l_i
$$
那么整个区间$[l_i,r_i]$的最长完美序列的长度可以分两部分来求。
左边:很显然为$mid_i-l_i$
右边:$MAX(m_i…r_i)$
所以右边的长度要使用ST表,即RMQ来求。
整个问题的时间复杂度:
$$
O((M+N) \times logN)
$$
1 | #include<algorithm> |
这是一道模板题。
输入一串数字,给你 $M$ 个询问,每次询问就给你两个数字 $X,Y$,要求你说出 $X$ 到 $Y$ 这段区间内的最大数。
模板题。不介绍。
RMQ问题
1 | #include<algorithm> |
Update your browser to view this website correctly. Update my browser now