本文同步发表于洛谷专栏。
神·神·又·秘·秘。
20251028
早上
早上的四道题是 P4587、P10144/P10210、P11536、P3527/SP10264。
T4 满脑子是前不久刚听说的二进制警报器。别想歪了,这个 \(k\) 复杂度也不是很对。
对每个国家,二分 \(k\) 然后区间加是好想的。
现在是问每一个国家,所以……可以……整体二分!哈哈哈哈。
【可持久化线段树也是可以的,但是本题特地卡空间。】
在这里拜谢 Sam_Yang 大巨佬让我避开了一点点整体二分的坑点,比如不要暴力清空任何东西,换句话说,一定要保证所有 \(O(n)\) 的操作只进行 \(\log(n)\) 次。
这辈子第一次写整体二分_哈哈哈。
T1 注意到如果大小在 \([0,k]\) 的数字的总和为 \(x\),那么我们可以把值域拓展到 \([0,k+x]\)。
然后可以暴力加。因为经过证明,次数是 \(\log\) 级别的。
真有意思。
T2 是恶心大分讨。我直接往平均数的方向想了 qwq。
T3 很神奇,是线段树的合并标记。【下文中会提到另一个合并标记。】这个故事告诉我们线段树是真香啊。
以及不要看到什么都想莫队等暴力算法【@Sexy_Foxy】。
下午
T1 之前做过但又想歪了。可以转化成先对 \(1\sim x\) 的链 \(+1\),然后求 \(1\sim y\) 的链上的数总和。
T2 似乎好像没……完全搞懂。
T3 就是一坨【不是说题不好,但是你就说那么多“串串”是不是一坨】。首先由于是“分割”式的匹配,因此可以贪心地分割(能匹配到就分割)。然后用哈希来匹配,一直蜿蜒到子树就好了。最后由于 \(\sum m_i \le 10^5\),因此 \(m_i\) 种类为 \(\sqrt n\) 级别(AMAZING!),可以对每种长度都来一遍。
晚上
晚上讲了三道树的直径。
三道题分别是 P8934、CF1192B、P11956。
你以为真的只是树的直径吗?非也。
有一个东西叫做什么“生成图的最大生成树”。对于每个点 \((i,j)\),它们俩在生成图上有一条长为 \(dis(i,j)\) 的边,其中这个 \(dis(i,j)\) 指的是它俩在树上的距离。
根据性质“一点到其它点的最远距离一定是它到直径两端点的距离的 \(\max\)”,我们知道一定会选一条直径,然后其它点和直径的两个点中的一个连接。
于是就变成了下面的样子:

于是这玩意就和树的直径扯上关系了。
关于树的直径不止有扫两遍和树型 DP 两种求法。
第一它可以作为一种可合并信息放到线段树上。
这很神奇。
此时 TA 的定义已经变为 \(\max_{i,j} dis(i,j)\),就是说,线段树上,一个区间,取区间内两个点使得它们 \(dis\) 最大。
这是可以合并的,取两个点集的直径的两个端点,\(C_4^2\) 看哪两个点距离最远就好了。
(这是说的 T2。)
第二可以维护直径的中点。
这更神奇。根据性质“若一棵树有多条直径,那么它们的中点都相同”,我们知道一棵树的直径们的中点是唯一的。
于是当直径可能被神秘地拓展也好,移动端点也好的时候,可以维护中点的移动。
那这就好办了,沿着移动的边切成“子树内”和“子树外”,区间加减就好了。
(这是说的 T3。)
20251029
早上
P8906,P13766,P8969。
T1 好恶心。这个 \(k=8\) 就很有意思。一般来说它设置为那么小一定有它的小巧思,要不然一定会设大一点。
有的时候,比如这道题,当 \(k\) 变大的时候解决问题的复杂度会陡增。因此我们可以由 \(k\) 较小的情况入手,然后推广至 \(k\) 稍微大那么一点点的情况。
稍·微·大·那·么·一·点·点。
比如此题,\(1\) 到 \(i\) 的路径可以转化为 \(1\) 到 \(j\) 再到 \(i\) 的路径。
把 \(k=8\) 拆成 \(k=4\) 和 \(k=4\)。
\(k=4\) 又可以拆成 \(k=2\) 和 \(k=2\)。
折·半·又·折·半。
T2 是颜色段均摊。题意不清晰差评。
可以用 ODT 也可以拍到线段树上。
带权中位数好评。\(\sum b_i \ge \frac{1}{2} \sum b\)(前提是按照 \(a_i\) 排序)。
关于颜色段的学习需要找 ODT 的相关博客。一次修改最多加 \(2\) 个区间,然后一次推平就什么也没有了。
T3 的 popcount 有神秘性质。
因为 popcount 的值域是 \(O(\log V)=30\) 的,因此可以定义 \(f(x)=\text{popcount}(x+a)+b\)。
然后线段树懒标记下传,就变成了喜闻乐见的“复合函数嵌套问题”。
我 cnm。
对于这种可合并的懒标记,一般都尝试把它转化成一个短短的操作序列。(比如区间加,区间乘,会转化成 \(x \leftarrow x \times a+b\)。)
下午
P9150,P10162。
T1 好恶心。
由于钥匙图是排列,因此是一坨置换环。破环为链,尝试扩展我们能到达的点的区间。这个细节还是太多了。
关于强连通分量、可合并“链”,区间使用并查集维护是否可达(且父节点放在最右边表示能到达的最右边的点),以及为什么要建反向边以快速找到“返祖边”的东西,我自己都有点迷迷糊糊。
T2 居然是分治。看来对分治的理解还是不够。
以及特殊的 \(a_i+a_{i+1},a_i-a_{i-1}\) 一定要拎出来特殊判断,只有好处没有坏处。
分治维护排序的数组。归并排序的好处在此体现地淋漓尽致。
晚上
没有新题,自己补题。
浙公网安备 33010602011771号