其他分享
首页 > 其他分享> > CF1290D Coffee Varieties (hard version)

CF1290D Coffee Varieties (hard version)

作者:互联网


sol.

\[ans = \sum_{i = 1} ^n [j < i\ \&\ a_j = a_j]\\ \]

考虑如何很快的 对于每一个位置查询之前是否有数跟他相同

考虑分块

对于每次检测,可以把当前数插到之前的块里面,就可以快速检测重复了

\[所以考虑分块的大小为\frac{k}{2} \]

如果在块内都没有重复的情况下,总的查询需要的次数大概在

\[\frac{4 * n ^ 2}{k ^ 2} * \frac{k}{4} = \frac{n^2}{k} \]

的样子

考虑一下如何处理块内重复的元素

每个块内大小为\(\frac{k}{2}\),有\(\frac{n * 2}{k}\)个块

如果直接暴力的插入,检测,因为重置次数的次数限制很大

\[\frac{(\frac{k}{2} - 1) * \frac{k}{2}}{2} * \frac{n * 2}{k}=\\ 约等于就是 \frac{n^2}{k} \]

所以这个操作次数是可以接受的

加强版:

发现操作次数由\(\frac{2 * n^2}{k}\)变成了\(\frac{3 * n^2}{2 * k}\)

然后把块外匹配\((i,j)\)当成无向图

发现原图构成了一张无向图

直接每次遍历一条链,这样就不用清空了,也就不需要清空了

就可以做掉


貌似还有更快的做法

标签:Coffee,frac,分块,重复,hard,CF1290D,次数,无向,清空
来源: https://www.cnblogs.com/Yeyuqing0913/p/15668747.html