2026.7 剪切线
P11598 Safety
Slope Trick。和 NarrowRectangles 这个题一样。
CF2229E Deconstruction Tree
首先生成 \(S\) 的过程中集合元素单调不降,且结尾一定为 \(n\)。
不妨让 \(n\) 为根。设 \(dp_i\) 表示以 \(i\) 结尾的 \(S\) 的数量,考虑何时可以贡献即得到一个可以用前缀和优化的转移。答案为 \(dp_n\)。
对于根节点 \(n\) 的转移特殊写。除 \(n\) 以外最大的元素一定在 \(n-1\) 在的那个子树里,且能删除除这个子树以外的所有元素,据此转移即可。
CF2236F2 Elections in Saransk
对每个素数 \(p\) 分别考虑,计数条件即 \(\sum_{i=1}^n v_p(p_i)=v_p(x)+max_{i=1}^n v_p(p_i)\)。
枚举指数最大值和取到最大值的位置,做前后缀背包合并即可。去重钦定一侧必须小于当前枚举的最大值,且对于 \(v_p(x)=0\) 的 \(p\) 存在所有 \(p_i\) 的指数都为 \(0\) 的一种情况,要额外加上。
CF1778D Flexible String Revisit
设 \(dp_i\) 表示从 \(i\) 个不同位置到 \(i-1\) 个不同位置的期望步数,简单变形得到 \(dp_i=\frac{n-i}{i}dp_{i+1}+\frac{n}{i}\),边界 \(dp_n=1\),答案即 \(\sum_{i=1}^n dp_i\)。
P1654 OSU!
记变量 \(l_i\) 表示以 \(i\) 为结尾的极长 \(1\) 段长度,递推维护 \(E[l_i],E[l_i^2],E[l_i^3]\) 即可,答案为 \(\sum_{i=1}^n E[l_i^3]\times (1-p_{i+1})\)。
CF24D Broken robot
写出方程组后高斯消元。直接消复杂度爆了,观察系数直接从上往下消一遍就可以变成上三角矩阵,接下来回代即可做到单次 \(O(m)\),总复杂度 \(O(nm)\)。
P4457 治疗之雨
全概率公式把期望翻译出来,和上一题本质相同,可以先从上往下消一遍变得只有主对角线和主对角线上方的一条线非 \(0\),然后回代即可。
细节特别多,调了好久。
P7509 撕裂抹消
\(k\) 很小,直接 dp。注意正常 dp 状态中期望是局部的,所以还需要记录一个到达局部的概率辅助转移。
P4284 概率充电器
即求每个点被充电的概率。把方程写出来后贡献拆成自己本身,子树内和子树外 dp 即可。注意处理子树外做退背包的时候除 \(0\) 的问题。
CF1139D Step to One
设 \(f_i\) 表示目前所有数的 \(\gcd\) 为 \(i\),则有 \(f_i=1+\frac{1}{m}\sum_{j=1}^{m} f_{(i,j)}\)。枚举因数并整理,改写为:
其中,\(G_{i,j}=\sum_{k=1}^m [(i,k)=j]=\sum_{k=1}^{\left\lfloor\frac{m}{j}\right\rfloor}[(\frac{i}{j},k)=1]=\sum_{k=1}^{\left\lfloor\frac{m}{j}\right\rfloor}\sum_{d|(\frac{i}{j},k)}\mu(d)=\sum_{d|\frac{i}{j}}\mu(d)\left\lfloor\frac{m}{jd}\right\rfloor\)
貌似精细分析一下复杂度是 \(O(m\sqrt{m})\) 左右的。可以通过。
CF1264C Beautiful Mirrors with queries
先考虑只有 \(1\) 是检查点的情况(2E),设 \(f_i\) 表示从 \(1\rightarrow i\) 全部通过的期望步数,变形可得 \(f_{i+1}=\frac{f_i+1}{p_{i+1}}\),即答案为 \(\frac{1}{p_n}+\frac{1}{p_{n-1}p_n}+\cdots\frac{1}{p_1p_2\cdots p_n}\),检查点相当于分割子问题,套个 set 维护就好。
SPOJ GSS2
涉及到区间去重往往离线做。对右端点扫描线后修改是简单的,查询就是区间历史最大值。
P13523 序列与查询
记 \(f_i\) 为原序列上长为 \(i\) 的最大子段和,那么用斜率为 \(-X\) 的直线去切 \((i,f_i)\) 的凸包就能 \(O(\log n)\) 处理单组询问。现在问题变成了如何求出 \(f_i\)。
考虑分治,在每个点上都维护一个 \((i,f_i)\) 的凸包。不跨过分治中心的情况直接合并两边的凸包,跨过分治中心的情况发现左边选 \(i\) 右边选 \(j\) 的情况合并起来就是 \((i+j,s_i+p_j)\), \(s_i\) 表示左边长 \(i\) 的后缀和,\(p_j\) 为右边长 \(j\) 的前缀和,这就是 \((i,s_i)\) 凸包和 \((j,p_j)\) 凸包的闵和,然后就做完了。
注意一下三点共线(如果你插入了 \((0,0)\))的情况要保留。
P10871 皇后 Kraljice
好题。
手玩一下 \(n=4\) 的情况,发现可以构造最大到 \(14\)。
考虑增量法构造,每次往外多两行,通过空一格让多的两行对应奇偶不同可以蛇形地填满,然后递归下去构造,特判 \(n\leq4\) 即可。
P14311 平衡三元组
好好题。
对于朴素的暴力,枚举中间值 \(y\),此时 \(x,z\) 分别取到两边最大值总是不劣的。
进一步地,区间中的最大值总是在最后选择的 \((B_x,B_z)\) 中,于是三元组 \((x,y,z)\) 的一个端点便确定下来了。不妨令 \(B_x\) 为区间最大值,此时依然希望 \(B_z\) 尽量大,即让 \(B_z\) 为后缀最大值,再在 \((x,z)\) 中找最大的 \(B_y\),此时一定合法。
同时,我们也希望 \(B_y\) 尽量大,那就不妨让 \(B_y,B_z\) 都是后缀最大值。如果在某一个地方 \((x,y,z)\) 合法了,那么由于它们已经取到了当前情况下的最大,此时直接退出即可。若不合法,就继续判断更小的后缀最大值,并且注意 \(y\) 取在 \(z\) 和其对应的前一个后缀最大值区间里的情况,这样就囊括了所有尽量大的合法情况。由于对于任意不合法解,\(B_x-B_z\) 的值是倍增的,所以这样一直递归下去算的复杂度是 \(O(\log V)\)。
用一个线段树维护区间最大值和位置即可,复杂度 \(O(q\log n\log V)\),非常厉害。
P5850 calc加强版
考虑 gf,\(n=k\) 时答案即为 \([x^k]F(x)=[x^k]\prod_{i=1}^k(1+ix)\),对 \(F(x)\) 取对数 \(G(x)=\ln F(x)=\sum_{i=1}^k \ln(1+ix)\),用付公主背包 trick 对里面求导有 \(\ln(1+ix)=\int \frac{i}{1+ix}=\int \sum_{n\geq 0}(-1)^n i^{n+1} x^{n+1}=\sum_{n\geq 1} \frac{(-1)^{n-1}i^{n}}{n}x^{n}\),带入原式,得到 \(G(x)=\sum_{n\geq 1} \frac{(-1)^{n+1}}{n}x^n \sum_{i=1}^k i^n\),最后自然数幂和的处理是经典的,提 EGF 出来得到 \(G(x)=\sum_{n\geq 1}(-1)^{n-1}(n-1)![x^n]T(x)\),其中 \(T(x)=\sum_{n\geq 0}(\sum_{i=1}^ki^n)\frac{(ix)^n}{n!}=\sum_{i=1}^k e^{ix}=\frac{e^{(k+1)x}-e^x}{e^x-1}\),由于这个时候分母常数项为 \(0\),上下要都除以 \(x\)(分子常数项也为 \(0\))。
不要忘记把 \(G(x)\) 常数项设为 \(0\),以及清空数组。。。
P3241 开店
淀粉树。动态开点内存依旧会爆,直接开 vector 维护就行了。
P5311 成都七中
考虑如何刻画 \(u\) 和 \(x\) 在同一连通块中,即 \(u \rightarrow x\) 的路径上点编号 \(l\leq\min,\max\leq r\)。
建出点分树,有一个结论是点分树上存在一个最浅的点 \(rt\) 和 \(x\) 在同一连通块,那么连通块上所有点都在 \(rt\) 的子树中。
所以现在就变成了一个二维数颜色的问题,用一次排序降维即可做到两只 log。
P11194 [COTS 2021] 县 Županije
首先注意到一个县所有点不是一个连通块一定无解。
那么对于两个县,限制最严的一定是交界的那两个点。推一下式子发现条件等价于交界边上的那两个点到各自县城的距离相等。于是缩一下县从下往上 dp,转移就是某个连通块中距离某个点为某个距离的点 \(+1\),不难用点分树了。

浙公网安备 33010602011771号