ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1712赛后口胡(E,F)

2022-08-14 03:01:09  阅读:144  来源: 互联网

标签:约数 链链 dep CF1712 枚举 lcm 所属 赛后


纯口胡,没看题解,有错请见谅。

E

题意是让你求满足 \(lcm(i,j,k)\geq i+j+k\) 的三元组个数。
我们通常都有一个直观感觉,lcm应该是各数之积级别的,换句话说, 不满足 \(lcm(i,j,k)\geq i+j+k\) 的三元组个数应该不太多,考虑用总的个数减去不合法的个数。
\(lcm(i,j,k)< i+j+k\) ,因为k是三元组中最大的数,所以 \(lcm(i,j,k)< i+j+k< k+k+k< 3k\)。又由于lcm一定是k的倍数,所以lcm的值只可能是k或者2*k。
1.lcm=k
i,j只要是k的约数即可,对于一组询问,答案为

\[\sum_{i=l}^{r}\binom{i在[l,r]中的约数}{2} \]

初始给每个位置赋初值为约数个数,对询问按照左端点排序,枚举左端点,每枚举一个就把当前枚举值的倍数的约数个数-1,那么询问 \([l,r]\) 就是区间的 \(\binom{a_{i}}{2}\)的和,线段树即可。
这部分 \(O(w\log w)\),其中w是值域=200000。

2.lcm=2k
设k的唯一分解中2的幂次是x,那么lcm=2k相当于要求i和j其中有一个的唯一分解中2的幂次是x+1。
枚举2k的所有约数作为i,如果2k中唯一分解中2的幂次是x+1,那么j只要满足在i和k之间且是2k约数即可。否则j的唯一分解中2的幂次必须是x+1。对于这两种情况都不难统计固定k之后,对于每一个合法的i,有多少个j符合我们设置的条件。这里要枚举1-2w的所有数的约数并存下来,还要对每个数的约数求出作为i的贡献并存下来,时空均是1个log的。
在之前的讨论中没有考虑l的限制,加入l的限制的话,用前缀和差分即可。
和前一种情况类似,对询问按照左端点排序,枚举左端点,每枚举一个左端点t就对t的倍数去掉t作为i对答案的贡献。这里具体实现可以把所有数放进优先队列(关键字为大于t的最小因数),t增加时查询当前堆顶是否有关键字等于t的元素,把t的贡献去除,再把关键字改为下一个约数后放回。快速查询下一个约数可以用链表。

总复杂度 \(O(w\log^{2} w)\)。

F

原题等价于建一个虚点向所有叶子连边,边权为 \(\frac{w}{2}\)。求直径。
在加上这些边之后,两点的最短距离只有两种可能,即原树上的简单路径或者在两点的子树中找深度最小的叶子,先到达叶子,然后走新加的边到另一个叶子,再到终点。
考虑点分,先处理过重心的所有路径。
直径可以写成这个样子:

\[ \max_{i,j}(\min(dep(i)+dep(j),dep(i子树内深度最小的叶子)+dep(j子树内深度最小的叶子)-(dep(i)+dep(j))+w)) \]

如果类似于树链剖分一样,选择拥有最浅的叶子的儿子为重儿子,树将被剖成若干条链,其中对于同一条链上所有节点,“子树内深度最小的叶子”相同。那么,对于两个点,如果他们所属的链已经确定, \(\min(dep(i)+dep(j),dep(i子树内深度最小的叶子)+dep(j子树内深度最小的叶子)-(dep(i)+dep(j))+w)\) 就只与 \(dep(i)+dep(j)\) 有关。而且前者随之递增,后者随之递减。而 \(dep(i)+dep(j)\) 的取值范围是 \([dep(i所属链链顶)+dep(j所属链链顶),dep(i所属链链底)+dep(j所属链链底)]\) 如果取不到折点(即 \(\frac{dep(i子树内深度最小的叶子)+dep(j子树内深度最小的叶子)+w}{2}\)),答案就是 \(dep(i所属链链顶)+dep(j所属链链顶)\) ,否则是\(\frac{dep(i所属链链底)+dep(j所属链链底)+w}{2}\)。判断条件是

\[dep(i所属链链顶)+dep(j所属链链顶)\leq \frac{dep(i所属链链底)+dep(j所属链链底)+w}{2} \]

这等价于

\[(dep(i所属链链顶)-\frac{dep(i所属链链底)}{2})+(dep(j所属链链顶)-\frac{dep(j所属链链底)}{2})\leq \frac{w}{2} \]

把所有剖后的链按照 \(dep(链顶)-\frac{dep(链底)}{2}\) 排序(注意到这里值域是 \(O(n)\) 级别,可以用桶排),那么对于每一条链,一个前缀与它的贡献就是\(dep(i所属链链顶)+dep(j所属链链顶)\),转化为查找前缀最小值。剩下的和它产生的贡献是 \(\frac{dep(i子树内深度最小的叶子)+dep(j子树内深度最小的叶子)+w}{2}\) ,与前者类似转化为查找后缀最小值。由于不同询问的树形态不变,所以可以先点分,树剖处理完之后枚举每条链的时候,再枚举每个询问的不同的w,对每个询问求出当前链的贡献。
复杂度:点分之后树剖,每条链按照特征值排序之后维护前后缀最小值,再枚举每条链,枚举每个询问,求出链对答案的贡献,复杂度 \(nq+n\log n\)。

标签:约数,链链,dep,CF1712,枚举,lcm,所属,赛后
来源: https://www.cnblogs.com/thedreammaker/p/16584691.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有