党同伐异

首先观察到对于 \(i\) 来说最大的 \(|a_i - a_j|\)\(a_j\) 只能是最大/小值。

推式子:

设最大值为 \(mx\), 最小值为 \(mn\)

若投给最大值则
\(|a_i - mx| >= |a_i - mn|\)

\(mx - a_i >= a_i - mn\)

\(mx + mn >= 2 \times a_i\)

\(2 \times a_i <= mx + mn\)

若投给最小值则

\(|a_i - mx| < |a_i - mn|\)

\(mx - a_i < a_i - mn\)

\(mx + mn < 2 \times a_i\)

\(2 \times a_i > mx + mn\)

因为每次只会删除最大/小值,所以有序数列下现在的数字一定是一段区间。
而哪些数投给最大/小值的位置是一段区间,选择用二分实现。

混乱谜团

显然距离总和最小的排列是 \(1, 2, 3, ..., n\)

考虑翻转使距离更远,我们可以固定一段区间将这段区间反转。(构造时我们保证这段区间是连续的自然数)

那么这段翻转的区间所加的距离之和是这段区间的最小值的距离和最大值的距离。

根据这个结论思考构造方式,依次去填数 \(i\),如果 \(i\)\(i + 1\) 的距离 \(< k\),则可以翻转 \([i, n]\) 这段区间,显然这样所加的距离是 \(n - i\),因为操作过后所加的距离是 \(0, ...., n - 1\),所以是一定能凑出距离为 \(k - n + 1\) 的排列。( \(k\) 要减去 \(1, 2, 3, ... n\) 这个排列的距离和 )

固若金汤

考虑设计状态
\(dp_{i, j}\) 表示当前保留的数列以 \(a_i\) 结尾,\(a_i\) 前面一个元素是 \(a_j\)

\(dp_{i, j} = \max \limits_{k = 1 且 a_i \operatorname{and} a_j \operatorname{and} a_k \ne 0} ^ {j - 1} dp_{j, k} + 1\)

\(x \operatorname{ans} y \ne 0\),则意味着 \(x\)\(y\) 在二进制上有共同的一位为 \(1\)

所以对于这个转移式,我们可以枚举 $a_i \operatorname{and} a_j \operatorname{and} a_k $ 在二进制下共同为 \(1\) 的某一位,通过预处理的方式得到这个情况的最大值
时间复杂度:\(O(N ^ 2 \times \log_{2} A_i)\)
因为本质上合法的状态最多只有 \(\frac{N \times (N - 1)}{2}\) 个,所以实际上是能过的。

替身使者

首先如果没有宽带限制,这道题直接写状压 \(dp\)

所以我们对如何处理宽带限制进行思考,我们可以枚举哪一个替身在选取方案下宽带限制最大,接着我们可以把小于这个替身的所有替身跑一边状压,方便实现可以对所有替身的宽带限制排序。

posted on 2024-07-02 13:10  appear  阅读(8)  评论(0)    收藏  举报