闲话 7.6

需要对若干序列按权值排序,序列 \(\lang a\rang\)\(2,3\) 构成,权值是

\[w(\lang a\rang)=a_1^{a_2^{a_3...}} \]

引理 \(1\):当 \(k\ge 4\) 时满足

\[\forall i,w(\langle\underbrace{2,2,2,\dots 2}_{i \text{个}} ,kx \rangle)>w(\langle\underbrace{3,3,3,\dots 3}_{i \text{个}} ,x \rangle) \]

证明容易。

推论:长度差大于 \(1\) 的序列直接可以按长度比较大小。

引理 \(2\)

\[\forall u\neq v\in \{w(\lang a_1,a_2,a_3,a_4\rang)\mid a_i\in \{2,3\}\}\\ \frac uv\not\in [\frac 14,4]\]

  • This is proved by C++。

因此,有定理:

以下的比较方法是正确的:

  • 先判掉长度差大于 \(1\) 的序列。

  • 对于长度差等于 \(1\) 的序列,把长的序列最后两个数取幂合并,比较后四个数的幂塔大小即可。

  • 对于长度相等的序列,找出最长公共后缀,如果长度大于 \(1\) 就直接比较最后一个不同的位置,否则比较不同的后四个位置(带上公共后缀)的幂塔。

直接快速排序+SA 就是 \(O(n\log n)\) 的。注意到长度相等的序列在快排中暴力找最长公共后缀的复杂度正确,不需要使用后缀数组 🤡

后记:

能否证明:

1.对于任意长度的序列引理 \(2\) 成立。

2.对于任意的(什么样的)两个数才有 1. 成立?

posted @ 2024-07-06 15:33  British_Union  阅读(15)  评论(0编辑  收藏  举报