www 被大佬们吊打了,尤其是zac2010>.<|

wscqwq

园龄:2年粉丝:2关注:3

丑数

丑数

考虑用堆来维护。

每次删去最小值后,插入最小值乘以其他的素数。

考虑去重,根据 2×3×2=2×2×3,每次记录某个数上一个数是什么,每次乘的质因数都是按照下标的顺序的。

由于每次插入的数都会比删除的大得多,所以堆的向上调整复杂度很低。

注意用手写堆,STL过慢(O2 MLE)。

代码

更简单的方法:

考虑第 i 个丑数一定是第 k(k<i) 个丑数乘以一个质数得到的,且比第 i1 个丑数大的最小的丑数。可以迭代 n 次,每次枚举质数,看每个质数至少需要乘第几个丑数才能达到,然后取最小者。由于丑数单调递增,所以每个质数至少需要乘第几个丑数也单调递增(有点绕),所以所以我们可以开数组表示上次的情况,复杂度玄学,速度飞快。

code

当然可以用平衡树了。

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17622086.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起