解题思路
- $\texttt{ST}$ 表
令 $st[ i ][ j ]$ 为 $\max \limits_{1 \leq t \leq (i + 2^j - 1)} arr[t]$
每在序列 $arr$ 的后面加入一个新值(假设是 $arr[ n ]$)时
它只会影响到一类 $st[ i ][ j ]$ 当且仅当
$$i + 2^j - 1 = n$$
也就是说,只会影响到所有终点为$n$的区间
将上述式子变形得:
$$i = n - 2^j + 1$$
所以,我们可以穷举这个$j$,使得 $1 \leq 2^j \leq n$
那么就可以定出这个长为$j$,终点为$n$的区间:
$$st[ i ][ j ] = st[ n - 2^j + 1 ][j]$$
Talk is cheap, show me the code.
1 | void insert(ll num) { |
1 | // 返回的是长度为 l ,终点为 n 的区间最大值 |
1 |
|