Codeforces Global Round 28
Codeforces Global Round 28 解题报告
A
操作的不变量是是否为 33 的倍数。简单小奥题。
B
一个数字最多管 \(k\) 个区间,依次填上 \(1,2,\cdots\) 是最优解。都管上后剩下的随便填。
C
显然(从样例看出)有一个区间必须是整个区间,这样才可能最大(证:位数优先)。如果另一个枚举 \(O(n^2)\) 种情况可以做到 \(O(\dfrac{n^3}{w})\)。
如果全是 \(1\),答案就是最后一位变 \(0\),简单。
否则找到第一个 \(0\),考虑一定可以保护左边的所有 \(1\),并转换这个 \(0\)。假设它在第 \(x\) 位(从小到大数),这一定要新选出的 \([l_2, r_2]\) 长度刚好为 \(x\) 才行。这样候选区间降为 \(O(n)\) 个,时间复杂度 \(O(\dfrac{n^2}{w})\)。实际上不压位应该也没啥问题。
D
对每个题目求出
则不难发现一场比赛 kevin 的排名是 \(1 + \max c_i\)。
于是肯定是选择最小的那些 \(c_i\),且尽量大的和大的排一场比赛,小的和小的一起。对 \(c\) sort 之后答案是 \(ans_k = \sum_{k \mid i} c_i\)。直接统计即可,时间复杂度 \(O(n\log n)\)。
E
小清新简单题。启发我们两个角度看问题。
发现 \(n\) 固定了之后 \(m\) 越大越难合法。问题是到底那个边界是什么呢?直接探究就有很多猜想了,比较麻烦。
考虑最多有几条边不会有环,就是每条边刚好一棵树,即 \(n(2n + m - 1)\) 条。于是有:
解得 \(m \le 2n - 1\)。
于是我们只需考虑构造出 \(m = 2n - 1\) 的情况。发现就是一条折线一样来回跳就行,每种颜色左起点后跳两格就不会重复。
左右点都从 \(0\) 开始编号,\((i,j)\) 的颜色就是 \((\lfloor \dfrac {i-j}2 \rfloor) \bmod n + 1\)。
F
套路题:先分析矛盾点,选的区间越长干掉的 \(a_i\) 就越多,但是干掉的量也越少。要去抓这样一个平衡。
考虑提前确定除掉的 \(\min = x\),那就一定是尽量去一个以 \(x\) 为最小值的极大区间,这提示笛卡尔树。手玩之后又发现两个性质:
- \(\lceil \dfrac{\lceil\frac ab\rceil}{c}\rceil = \lceil\dfrac {a}{bc}\rceil\)
- \(2^{60} > 10^{18}\)
这意味着问题相当于每一位分别去累乘选择的 \(b\) 让累乘值 \(\ge a\),且 \(ans \le 60\)。
答案呼之欲出。在笛卡尔树上 DP :
令 \(f_{u,j}\) 表示 \(u\) 代表的区间上共进行了 \(j\) 次操作,区间最大数最小能变成多少。转移:
时间复杂度 \(O(n\log^2 A)\)。
有没有更加简单快速的优化?有的兄弟,有的,单调减数列的 min-max 卷积等价于它们的有序归并。瞬间降到 \(O(n\log A)\)。
G
一句话:问你 \(n\times m\) 的值域 \([1,v]\) 中整数的行最大值的最小值不大于列最小值的最大值的矩阵有几个。
关键是基础要夯实,才能做出来。正难则反,考虑算左边 \(> a\),右边 \(\le b\) 的方案数 \(f(a, b)\)。
答案就是:
考虑容斥左边有几行不满足 \(> a\),容斥完每列独立:
好像就做完了。qwq
H
不会了,看题解。
反思一下就是一是看到这种 max 的要想到向前传递,进而形成区间;二是考考察合法最终状态的特征。
qwq

浙公网安备 33010602011771号