CSP模拟赛 #43
A
一棵树,每次加入一条路径,或者查询一条给定路径包含的路径个数。
\(n,m,q\le 10^5\)
矩形加法,单调查询,三维偏序,cdq 分治。
B
一棵树,有 \(n+1\) 层,第 \(i\) 层有 \(i\) 个点。对于第 \(i(1\le i\le n)\) 层,点的编号分别为 \(\frac{i(i - 1)}2 + 1 \sim \frac {i(i + 1)}2\),该层的第 \(a_i\) 个点有两个儿子,其他点仅有一个儿子。\(q\) 次查询两个点的 LCA,强制在线。
\(n\le 2\times 10^5\)
二度点可缩,考虑只保留所有叶子和三度点,这样树的点的个数为 \(\mathcal O(n)\)。思考如何找到一个点往下延伸到的第一个三度点或叶子,考虑从 \(i = n\dots 1\),维护 \(b_i\) 表示第 \(i\) 个位置的点是否存在。每次找到 \(b\) 中第 \(a_i\) 和 \(a_i + 1\) 个 \(1\) 的位置 \(x,y\),令 \(b_y\gets 0\),并记录 \(c_i\) 表示第 \(i\) 个位置的点的编号。每次找到处理了 \(i...n\) 后的第几个 \(1\) 即可,强制在线可以用主席树。
C
给定序列 \(a\),你需要把 \(a\) 打乱。排序一:多次交换任意两个数;排序二:多次交换相邻两个数。一个序列合法当且仅当排序一和排序二的最小操作次数相同,求可以得到的本质不同的打乱后的合法序列个数。
\(n\le 10^6\)
考虑 \(a\) 中的数互不相同该怎么做。排列由若干环组成,一个环一定是排列上的一段区间。
考虑单个环,逆序对数一定 \(\ge n - 1\)。一个结论:一个环 \(p_{1,2,\dots, n}\) 中,若逆序对等于 \(n - 1\),则 \(1\to n\) 这条路径上所有点编号递增,\(n\to 1\) 这条路径上所有点编号递减。
证明
-
充分性:令 \(1\to n\) 路径上的点以及 \(1\) 号点属于递增链,\(n\to 1\) 路径上的点以及 \(n\) 号属于递减链。找到第一个 \(x\) 满足 \(x\) 在递增链上,\(x + 1\) 在递减链上,交换 \(p_x\) 和 \(p_{x + 1}\) 即可划分为两个结构相同的环。
-
必要性:归纳证明。对于一个合法的环,找到第一个可行的操作位置 \(x\),交换 \(p_x\) 和 \(p_{x+1}\) 得到 \(p'_{1\dots n}\)。由于合法性,两个环分别为 \(1\dots x\) 和 \(x + 1\dots n\)。已证明大小为 \(x\) 和 \(n - x\) 的环满足对应结构,那么交换 \(p'_x\) 和 \(p'_{x + 1}\) 得到的 \(p\) 应为:\(1\dots x\) 的递增链接上 \(x + 1\dots n\) 的递增链,然后 \(x + 1\dots n\) 的递减链接上 \(1\dots x\) 的递减链。接完后,满足对应结构。
考虑 \(a\) 中存在相同的数,相同的数按照位置从小到大离散化,形成一个排列。如果相同的数处于同一个环中一定不合法,因为排序一可以不把所有点都操作一元环。发现加上这个条件之后,条件就充要了,剩下的直接简单 dp 即可。
- 启示:大胆猜结论;证明中的充分性和必要性。
D
一棵树,多次询问。每次给定一条路径 ,求到达这条路径的距离 \(\le d\) 的点的个数。
\(n, q\le 2\times 10^5\)
考虑树链剖分,一条路径划分为若干条链。
设 \(f_{u, k}\) 表示 \(u\) 子树内距离 \(\le k\) 的点的个数,\(g_{u, k}\) 表示 \(u\) 子树内轻儿子子树中距离 \(\le k\) 的点的个数。
对于 \(\text{lca}(u,v)\),我们需要求子树外的点的个数,可以用点分治求得距离该点 \(\le d\) 的点的个数,减去 \(f_{u, d}\)。
对于每条链,相当于求这条链上所有点的 \(g_{\_, d}\)。对于每条链的最后一个点 \(x\),需要加上 \(f_{son(x), d - 1}\),减去下一个点 \(nxt\) 的 \(f_{nxt, d - 1}\)。
我们现在的问题是:\(\mathcal O(q\log n)\) 次单点查询 \(f\),\(\mathcal O(q\log n)\) 次查询一个点 \(x\) 到其重链根的所有 \(g_{y, d}\)。
对于 \(f\),可以离线长链剖分。
对于 \(g\),考虑暴力加入所有轻子树信息,发现 \(\le d\) 的点的个数相当于总点数减去距离恰好为 \(d + 1\) 的点的子树和。
时间复杂度 \(\mathcal O((n + q)\log n)\)。