2024.10.15 test
B
\(n\) 个数,若干次全局加操作,并执行 \(a_i\gets \max(0,a_i),a_i\gets\min(i,a_i)\),操作完查询全局和。
注意到序列一定是连续上升序列-相等-连续上升序列-相等-...的形式,那么考虑用栈维护每个上升区间。
考虑拆贡献到每个区间,\([l,r]\) 的区间贡献是 \(\frac{1}{2}(r-l+1)(r-l)+(n-r)(r-l)\)。
即令当前区间是 \([1,r-l]\) 算贡献,然后把后面的值都加上 \(r-l\)。
于是维护这个栈即可。
C
长度为 \(n\) 的序列,一开始有 \(m\) 个被染黑的区间,你需要进行 \(k\) 次额外操作,每次染黑一个长 \(x\) 区间,问最大连续黑色区间长度。\(k\le 10^9\)。
钦定一些区间必须在最终的答案中,而其他区间都不考虑。
那么中间的所有空隙都必须填上。对于一个长度为 \(y\) 的空隙,需要 \(x/y\) 向上取整次操作。
对于剩下的操作,我们将它们尽可能优地填在区间两边。
但是,其中有一些区间加入是不优的。具体地说,如果从第一个白色不重复地填,如果正好有一个区间被一次操作完全包含,那么它实际上会产生负贡献。
我们需要保证第二个区间开始每一个区间中都有一个格子和其正前方的空隙的第一个格子 \(\bmod x\) 相等。我们从后往前考虑,对于每个区间都可以找到下一个可以选的区间,并可以求出填上这一段空隙需要多少次操作。考虑倍增处理即可。
D
在高维立方体中,有 \(n\) 维,每维取值为 \([0,p_i-1]\),每次走可以选一维走到坐标 \(+1\) 的位置。问至少多少条路径可以覆盖整个正方体。\(n\le 32,p_i\le 1e9\)。
DAG 上最小路径覆盖,根据 Dilworth 定理可以转化为求最大反链,即最多的点其两两不可达。
于是依此加入每一维,记录当前维每种取值,算上之前的维对应的最大答案。复杂度 \(O(\sum p)\) 。
考虑从 \(p_i=2\) 的情况入手,不难发现答案是 \(C_n^{n/2}\),也就是选出 \(n/2\) 个位置填 \(1\),剩余写 \(0\) 方案数。
即我们猜想选出所有维度坐标和 \(=(\sum p_i)/2\) 即为最大反链;因为坐标的和相等,所以肯定不存在偏序。
那么这题转化为一个求方案数问题,直接 dp 求很简单,考虑处理 \(p_i\le 1e9\) 的情况。
考虑类比“硬币购物”处理背包问题,容斥,钦定若干个维度超出 \(p_i\) 限制的情况。
令 \(m=(\sum p_i)/2\),即 \(Ans=\sum_S \times (-1)^{|S|}\times C_{m-\sum_{i\in S}p_i+n-1}^{n-1}\),运用插板法。
考虑 meet in middle 算法,考虑左边的和为 \(a\),右边的和为 \(b\),我们要想把 \(a,b\) 结合起来。
\(C^{n-1}_{m-a-b+n-1}\) 要想有结合律,就把其拆成多项式的形式,写成若干 \(c_{i,j}\times a^ib^j\) 的形式,次数不超过 \(n\)。
所以我们枚举 \(a\),处理出若干 \(b^i\) 的和即可。