不知道第多少次 三

时效性

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$。

.#. #.. .#.
#.. ..# ..#
..# .#. #..

同理。

D

posted @ 2023-10-07 21:44  5k_sync_closer  阅读(2)  评论(0编辑  收藏  举报  来源