sol.
考虑如何很快的 对于每一个位置查询之前是否有数跟他相同
考虑分块
对于每次检测,可以把当前数插到之前的块里面,就可以快速检测重复了
\[所以考虑分块的大小为\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)\)当成无向图
发现原图构成了一张无向图
直接每次遍历一条链,这样就不用清空了,也就不需要清空了
就可以做掉
貌似还有更快的做法