P5610 [Ynoi2013] 大学

[Ynoi2013] 大学 - 洛谷

  • 傻逼卡常题

  • 发现自己基础数据结构用的还不是很熟练,并没有想到一开始的 set 做法,更不用提后面的并查集优化了

  • 首先每个数最多被进行 O(logA) 次有效除法,如果我们找到区间中哪些数要被除后直接暴力用树状数组单点修改,可以做到 O(nlognlogA),因此现在的问题是找到这些书

  • 一个数的因数大约有 O(A13),个,所以考虑把所有拥有因数 i 的放到第 i 个集合中,用数据结构维护,需要支持以下操作:

    • 删除一个数

    • lower_bound

    • 查询一个数的值

  • 平衡树可以,但是过不去

  • 发现没有插入操作,直接并查集跑

  • 然后你会发现你 TLE毕竟这是由乃题

  • 优化:

    • 不要暴力分解因数,而是用筛子做到 O(nA13)

    • 处理因数时不要用 vector,不然会增加 1.53 倍常数,写邻接表

    • 不要用 vector,用内存池

    • 不要用 C++14 (GCC 9) 提交,而是用 C++14 提交 (我也不知道这是什么原因)

  • 然后应该就可以过了

  • 最终复杂度 O(nA13+AlogA+nlogn)

posted @   FOX_konata  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示