山外集训Day1

题面:https://files.cnblogs.com/files/blogs/832279/statements.zip?t=1785237173&download=true

T1

我们把最小的放到前面一定是最优的。
假设原来我们的序列是 \(a_1, a_2, \cdots, a_k, x, \cdots\)
我们把 \(x\) 调整到开头。
它长这样:
image
红色部分贡献相同。
我们考虑 \(a_1\)\(\gcd(a_1, x) + x\) 的大小关系。
注意到 \(a_1 - x\le \gcd(a_1, x)\),因为 \(a_1 - x\le \gcd(x, a_1 - x)\)
而其它部分的贡献显然不劣。
所以最小值一定在第一个。
然后我们让 \(a_i = \gcd(a_i, x)\)
它就变成了一个规模为 \(n - 1\) 的子问题。
我们一直这么进行下去直到所有的数全相等。
这样最多进行 \(\log\) 次,而每个点最多下降 \(\log\) 次,所以复杂度为 \(\mathcal O(n\log n)\)

T2

我们用 Graham 算法的思想。
我们先按照 \(y\) 为第一关键字,\(x\) 为第二关键字排序。
排序之后我们枚举某一个前缀被我们抛弃了。
因为最多抛弃 \(k\) 个数,所以复杂度 \(\mathcal O(k)\)
取某个前缀后的数为基准,进行极角排序。
然后我们令 \(f_{i,j,k}\) 表示我们上一个点选的编号 \(i\),这个点选的编号 \(i+j\),已经抛弃了 \(k\) 个数,的答案。
转移我们只从合法的 \(f_{i,j,k}\) 转移到 \(f_{i+j, i+j+l, m}\)
因为我们最多抛弃 \(k\) 个点,所以复杂度 \(\mathcal O(nk^3)\)
总复杂度 \(\mathcal O(nk^4)\)

T3

路径长度 \(=\) \(dep[a] + dep[b] - 2 * dep[lca(a, b)]\)
我们如果直接上子树加、子树求和的dfs序线段树,就不能处理 \(y\)\(x\) 子树里的情况。
仍然沿用原来的线段树,只是对于 \(y\)\(x\) 子树内的情况新开一棵线段树。
对于 \(dep[lca(a, b)]\),我们考虑算每一条边的贡献。
我们维护每条边的 \(S = sum * siz\) 之和,siz表示连接的儿子的子树的siz。
image
你给每个 \(x\to y\) 的边的sum都加上边权,给 \(x\) 连向父亲的边的sum加上 \(1\to x\) 的前缀边权和。
对于 \(x\) 的子树求和,它的第二棵线段树的贡献就是 \(1\to x\)\(S\) 之和。
树剖线段树 \(\mathcal O(n\log^2 n)\) 即可。

T4

不会,截图的题解。
image

今天讲的思维题及题解

https://files.cnblogs.com/files/blogs/832279/Downloads.zip?t=1785242349&download=true
其中第一个题还可以:我们假设一个数出现过为 (,没出现过为 ),我们按值域从小到大进行括号匹配,最后剩的一定是 )))...(((
我们把最后一个 ) 改成 (,则它的结构还是稳定的。
而且一定存在一个 ),因为少的数一定大于多的数。
我们把Bob得到的数列重新尽心括号匹配,找到第一个 (,就可以。

posted @ 2026-07-28 20:40  SigmaToT  阅读(14)  评论(0)    收藏  举报