石门集训20231109记录

早上把 11.8 题解写了。然后做了一道可爱的树状数组+并查集题目

我永远喜欢珂朵莉~    \ |\ \ Ynoi2013 大学

把二分,树状数组,除法,并查集的性质有机结合了,思路真的很巧妙,但是后者卡常,搞了好久。

每个数最多只能被除 loga\log a 次。所以共有 nlogan\log a 次生效的除法操作。

再用树状数组维护,复杂度 O(nlogalogn)O(n\log a \log n)。现在的复杂度瓶颈在于如何快速找到数字并删除。将每个数分解质因数,将同约数的数的下标存到 vector 里。

每次除 xx 的时候,lower_bound 找到左边界。然后开始除,每次除完再检查是否仍可以存在该集合里。如果不行就删除,用 erase 会超时。可以再用并查集维护,开始父亲是自己,每次找下一个点的根。

这样写的好处在于,可以实现快速的删除。只需要将该节点的父亲指向下个节点,下次访问就会直接找到目标节点。

设 x 为 aia_i 的约数集合个数。复杂度为 O(nxα(n)+nlogalogn)O(nx\alpha(n)+n\log a \log n)

晚上写了两道数学题:

反素数     \ \ |\ \ 一道水题II

与质数的性质有关。

反素数有以下的性质:

设分解质因数后为:

X=p1c1×p2c2pncnX=p_1^{c_1}\times p_2^{c_2}\dots p_n^{c_n}

会发现 pp 是连续的质数,并且 cc 不上升。证明:如果 pi<pj,cj>cip_i<p_j,c_j>c_i。那么交换 ci,cjc_i,c_j 很明显更优秀。

因为 2×3×5×7×11×13×17×19×23×29>2×1092\times3\times5\times7\times11\times13\times17\times19\times23\times29>2\times10^9

所以直接搜索这十个质数的个数即可。每次取最大的因数个数,相同时取更小的数即可通过。


后题其实是求 lcm(1n)\operatorname{lcm}(1\dots n)

因为最小公倍数的性质,设

Xk=p1c1×p2c2pkckX_k=p_1^{c_1}\times p_2^{c_2}\dots p_k^{c_k}

di=maxk=1n{ci}d_i=\max\limits_{k=1}^{n}\{c_i\}。即对每个质数的指数取最大值。

lcm(1n)=i=1ndi\operatorname{lcm}(1\dots n) =\prod\limits_{i=1}^{n}d_i

观察样例发现,每个质数不超过 nn 的乘方才会贡献。感性理解一下,如果有多种质因数,那么每个的个数 \leq 只包含一种的。

所以筛一下质数就好了。

posted @ 2023-11-10 14:39  cjrqwq  阅读(8)  评论(0)    收藏  举报  来源