Codeforces Round 945 (Div. 2) (A - E)

A

每一轮对总分的贡献都是 \(2\),如果 \(p_1 + p_2 + p_3\) 为奇数则无解。

  • \(p_1 + p_2 \le p_3\),最多 \(p_1 + p_2\) 轮。
  • \(p_1 + p_2 > p_3\),可以 \(1, 2\) 轮流将 \(3\) 耗完,然后互相匹配,最多 \(\dfrac{p_1 + p_2 + p_3}{2}\)

B

  1. 如何判断一个 \(k_0\) 是否符合条件?

    处理每一位的前缀和,依次检查每个长度为 \(k_0\) 的子串,\(O(N\log N)\)

  2. 如果 \(k_0\) 符合条件,则 \(k_1 = k_0 + 1\) 是否符合条件?

    \(s_i = a_i \mid a_{i + 1} \mid \cdots\mid a_{i + k_0 - 1}\)

    \(s_i' = s_i = a_i \mid a_{i + 1} \mid \cdots\mid a_{i + k_1} = s_i \mid s_{i + 1}\)

    由于 \(\forall i, j, \ s_i = s_j\),所以 \(\forall i, j, \ s_i' = s_j'\)

答案具有单调性,考虑二分,复杂度 \(O(N\log^2N)\)

C

长度为 \(n\) 的序列最多 \(n / 2 - 1\) 个局部最大值。

是否能达到这个上界?

钦定 \(n / 2\) 个位置为局部最大值,给这些位置按数值从大到小分配 \(n/2 + 1\cdots n\) ,给其他位置按数值从大到小分配 \(1\cdots n / 2\)

钦定位置的最小值可能为 \(n + 1\),其他位置的最大值也可能为 \(n + 1\),不好判断。

如果钦定位置一定包含数值 \(n\) 呢?

钦定位置至少为 \(n + 1\),其他位置最大只有 \(n\)

因此,只要在选定 \(n/2\) 个位置后,按上述策略分配即可。

由于局部最大值两两不相邻,不妨按照 \(n\) 所在位置的奇偶钦定全部奇数位或全部偶数位。

D

  1. 答案 \(m\) 一定是最大值 \(mx\) 的倍数。
  2. 最短子段长度不大于 \(n / k\)
  3. \(m\) 一定不大于 \(mx\)\(n / k\) 倍。

于是先花 \(n\) 次操作找到最大值 \(mx\)

再枚举 \(m\)\(mx\) 的几倍,每轮不超过 \(k\) 次,总共不超过 \(n\) 次。

E

  1. 如果 \(l, r\) 合法,则 \(l' \le l, \ r'\ge r\) 合法。
  2. 找到 \(i \ne p_i\) 的最小位置和最大位置 \(L, R\),则一定满足充分条件 \(l \le L + n \land r\ge R + 1\)

先看 \(l = r\) 的情况。

满足 \(\forall a_i\ne i, \ r = a_i + i\),则答案加一。

再看 \(l < r\),不妨枚举 \(r \in [R + 1, 2n]\),找到合法的最大 \(l\)

将可以交换的点对 \((x, y)\) 间连边。

\(l = r - 1\) 时,整张图就联通了,也就是任意两个数可以通过若干次间接操作交换,此时一定合法。

得到 \(l\) 的上界即 \(\min(r - 1, L + n)\)

posted @ 2024-05-20 12:08  Lu_xZ  阅读(85)  评论(0编辑  收藏  举报