UOJ Logo supy的博客

博客

UOJ341的另一种写法&有关其复杂度的问题

2019-01-25 12:55:56 By supy

这里只讨论末尾加入的操作(末尾删除复杂度相同,头部操作大概不是瓶颈) 标算的写法是枚举每个约数更新约数的约数,对于单次操作$x$,复杂度为$O(\sum_{i|x}d(i))$。

我写的是另一种写法:从后往前更新约数的dp值,维护目前所有dp值改变的位置集合,更新dp值就枚举集合中每个位置,如果是倍数就进行修改。 这样复杂度似乎不好分析,因为一个位置只有dp值改变才会加入集合。这样单次最坏是$O(d(x)^2)$的(这当然很大)。 但是实际运行速度很快,UOJ上目前是rk1,代码http://uoj.ac/submission/318055

我很想知道这个写法的复杂度到底是什么。

评论

Roselia
http://uoj.ac/submission/371679 这是一个比supy代码的最劣单次操作复杂度还要大的做法,也可以认为这是一个乱搞。 记 d(x) 为 x 的约数个数, insert_right最劣是 $\mathcal O(d(x)^2)$ 的,delete_right最劣是 $\mathcal O(d(x)m)$ 的。 可惜的是,我构造了两组数据,并没有卡掉这个乱搞,所以还有没有哥哥看到了也顺便教教我啊。

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。