1 条题解

  • 0
    @ 2025-8-24 23:01:54

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Zzzcr
    **

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

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

    以下是正文


    upd:为防止歧义换了个变量名。


    提供一个唐氏做法,不需要莫比乌斯反演。

    首先把原式放到一起:

    i=1nj=1igcd(j,ij)k\sum_{i=1}^n{\sum_{j=1}^{i}\gcd(j,i\oplus j)^k}

    这个 gcdk\gcd^k\oplus 看着都比较丑,考虑先枚举 gcd\gcd,记作 dd,只需要对于每个 dd,求得 iji\oplus jjj 都是 dd 的倍数的合法 (i,j)(i, j) 个数,记作 rdr_d,并做简单容斥就能求出答案,于是只需要考虑如何快速求出每个 rdr_d

    x=ijx=i\oplus j,我们可以容易的找到一种表述 rdr_d 的方式,即:

    rd=dxt=xn[dtx]r_d=\sum_{d\mid x}\sum_{t=x}^{n}[d\mid t\oplus x]

    考虑优化这个计算过程。

    考虑维护一个序列 aa,枚举 dd,再在每个 xx 处做单点 +1+1。发现对于每对 (x,i)(x,i)axia_{x\oplus i} 会对 rdr_d 造成贡献,当且仅当 xinx\oplus i \le n。我们当然可以通过枚举 ii 来做到 O(n2logn)O(n^2 \log{n}),但这并不够优秀,回顾一下刚才对 aa 进行的操作,只有单点 ±1\pm1,全局下标 xor\operatorname{xor} 和区间求和,这显然可以使用线段树优化,于是我们便用 O(nlog2n)O(n\log^2{n}) 的复杂度解决了此题。

    • 1

    信息

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