Loading

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)\)

posted @ 2024-10-23 19:56  Lgx_Q  阅读(8)  评论(0编辑  收藏  举报