1 条题解

  • 0
    @ 2025-8-24 23:07:20

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Monomial
    ?

    搬运于2025-08-24 23:07:20,当前版本为作者最后更新于2024-12-29 21:01:44,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    显然有一个莫队的思路,我们维护 cnti,jcnt_{i,j} 表示所有有 iki^{k} 作为因子的 iji^{j} 贡献的次数,这个很显然可以 O(logV)\mathcal{O}(\log V) 维护,每次莫队更新时加上或除掉就行,那么我们有了一个 O(nndlogV)\mathcal{O}(n \sqrt{n} d \log V) 的做法,其中 dd 表示最大不同质因子数。

    这个莫队做法很不优,因为更新复杂度达到了 log\log 级别。我们去考虑一次更新操作的本质,以右移右端点为例,其实就是计算 [l,r][l,r]r+1r+1 位置的贡献,我们设这个为 f(r+1,[l,r])f(r+1,[l,r]),它显然可以拆分为 f(r+1,[1,r])f(r+1,[1,l1])f(r+1,[1,r])-f(r+1,[1,l-1]) 的形式。依照前面的方法枚举前缀,维护 cntcnt,每次去计算 ff 的贡献,时间复杂度 O(ndlogV+nnd)\mathcal{O}(nd\log V+n\sqrt{n}d),空间复杂度 O(nn)\mathcal{O}(n \sqrt{n}),足以通过。

    接下来可以进一步优化这个做法,我们发现一次连续的更新其一部分前缀的端点是固定的,那么直接记下位置的区间即可,对于另一种情况很容易发现是 f(x,[1,x1])f(x,[1,x-1]) 的形式,预处理即可,空间复杂度 O(n)\mathcal{O}(n),其实也就是莫队二次离线的基本思路。

    注意,本做法需要卡常,比如使用光速幂。

    • 1

    信息

    ID
    11193
    时间
    3000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者