不知道第多少次 三
时效性
A
考虑 Kruskal,容易发现加入一条 $|u-v|=d$ 的边后,原图被 $n-\gcd(n,d)$ 个这条边的副本连成 $\gcd(n,d)$ 个连通块,
每个块内点的编号形成一个模 $\gcd(n,d)$ 等价类,于是把每个同余等价类当成一个点,即 $n\gets\gcd(n,d)$ 即可。
B
定义 $p_i=\sum\limits_{j=1}^i[a_j>a_i]$,则趟数为 $\max p_i$。
注意到合法的 $p$ 与 $a$ 形成双射,于是只需求合法的 $p$ 的最大值的期望。
令 $c_k=\sum\limits_p[\max p_i=k]=\sum\limits_p[\max p_i\le k]-\sum\limits_p[\max p_i<k]=(k+1)!(k+1)^{n-k-1}-k!k^{n-k}$,答案就是 $\dfrac{\sum k\times c_k}{n!}$。
C
以下每个 #
代表一个点。
$k=1$
统计每个点被多少矩形包含。
$k=2$
统计每个二元组被多少矩形包含。
.#
#.
在每个点 $i$ 处统计它与前面的点形成的二元组的贡献,即 $(n-i+1)(n-a_i+1)\sum\limits_{j<i,a_j<a_i}ja_j$,二维数点。
#.
.#
同理。
$k=3$
..#
.#.
#..
在每个点 $j$ 处统计它与前后的点形成的三元组的贡献,即 $\sum\limits_{i<j,a_i<a_j}\sum\limits_{j<k,a_j<a_k}ia_i(n-k+1)(n-a_k+1)=\sum\limits_{i<j,a_i<a_j}ia_i\sum\limits_{j<k,a_j<a_k}(n-k+1)(n-a_k+1)=\left(\sum\limits_{i<j,a_i<a_j}ia_i\right)\left(\sum\limits_{j<k,a_j<a_k}(n-k+1)(n-a_k+1)\right)$,两次二维数点。
#..
.#.
..#
同理。
..#
#..
.#.
定义此类三元组中前两个点组成的“前两元组”$((i,a_i),(j,a_j))$ 的贡献为 $ia_j$,
扫描横坐标,维护 $c_i$ 表示已经扫过的,以纵坐标为 $i$ 的点为第一元的前两元组贡献和,
扫到 $i$ 时 $i$ 与 $j|j<i,a_j>a_i$ 形成前两元组,需要把所有 $c_{a_j}$ 加上 $ja_i$,
扫到 $i$ 时 $i$ 与以 $j|j<i,a_j<a_i$ 为第一元的前两元组形成三元组,答案需要加上 $(n-i+1)(n-a_i+1)c_{a_j}$。
线段树维护区间 $\sum c_i$,考虑对所有 $c_{a_j}|a_j\in[l,r]$ 加上 $ja_i$ 后,区间和加上 $\sum\limits ja_i=a_i\sum j$,所以还要维护区间 $\sum j$。
.#. #.. .#.
#.. ..# ..#
..# .#. #..
同理。