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
-
如何判断一个 \(k_0\) 是否符合条件?
处理每一位的前缀和,依次检查每个长度为 \(k_0\) 的子串,\(O(N\log N)\)。
-
如果 \(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
- 答案 \(m\) 一定是最大值 \(mx\) 的倍数。
- 最短子段长度不大于 \(n / k\)。
- \(m\) 一定不大于 \(mx\) 的 \(n / k\) 倍。
于是先花 \(n\) 次操作找到最大值 \(mx\)。
再枚举 \(m\) 是 \(mx\) 的几倍,每轮不超过 \(k\) 次,总共不超过 \(n\) 次。
E
- 如果 \(l, r\) 合法,则 \(l' \le l, \ r'\ge r\) 合法。
- 找到 \(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)\)。