专栏文章

题解:CF2039F2 Shohag Loves Counting (Hard Version)

CF2039F2题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miqy5qse
此快照首次捕获于
2025/12/04 12:39
3 个月前
此快照最后确认于
2025/12/04 12:39
3 个月前
查看原文
来点考前题解。幽默的是场上以为 F2 就是 m106\sum m\le 10^6 然后以为被卡常乐,鉴定为眼瞎导致的。最后六分钟意识到正确题意 rush 失败。
考虑某数在笛卡尔树上的子树大小 ss,这意思是可以在 1s1\sim s 的长度做贡献。由于 ff 两两不同,相邻的 ff 一定被不同的贡献,也就是说 s1,s2sns_1,s_2\dots s_n 两两不同,也只能是 1,2,n1,2,\dots n。易见此数组两两不同,因此 nn 长度数组的确定值域后的方案数是 2n12^{n-1},这是因为次小值到最大值都可以随意选择放左侧/右侧。
现在只需对值域 dp 选了哪些。写成多步转移是 fi,jf_{i,j},表示 imi\sim m 里面选的 gcd 是 jj。转移为
fi,jfi,j+2fi+1,k(gcd(k,i)=j<k)fi,ifi,i+1f_{i,j}\gets f_{i,j}+2f_{i+1,k}(\gcd(k,i)=j<k)\\ f_{i,i}\gets f_{i,i}+1
这是 O(m2)O(m^2) 的(在 F1 中),考虑优化。注意到每次被影响的 d=jd=j 只有 did\mid i,枚举 dd,使用莫反优化 dp。需要计算
kfi+1,k[(k,i)=d]=dkfi+1,k[(kd,id)=1]=dkfi+1,kt(kd,id)μ(t)=tidμ(t)dtkfi+1,k\sum_k f_{i+1,k}[(k,i)=d]=\sum_{d\mid k}f_{i+1,k}[(\frac kd,\frac id)=1]\\ =\sum_{d\mid k}f_{i+1,k}\sum _{t\mid (\frac kd,\frac id)}\mu (t)\\ =\sum _{t\mid \frac id}\mu (t)\sum_{dt\mid k}f_{i+1,k}
若记 Fx=xkfi+1,kF_x=\sum_{x\mid k}f_{i+1,k},则
=dtiμ(t)Fdt=\sum _{dt\mid i}\mu (t)F_{dt}
暴力枚举 tt,总复杂度为
ijkm=O(mlog2m)\sum_{i\mid j\mid k\le m}=O(m\log^2m)
每次更新 fi,jf_{i,j} 后暴力更新 FF,复杂度同上,可以通过 F1。
F2 需要从小到大 dp!易见转移是线性变换,那么记 f=[0,0,0,0,1]f=[0,0,0,\dots 0,1]mm00),AA 为每次的转移矩阵,答案可以写为:
ans=i(fAmAm1Am2A1)ians=\sum_i (fA_m A_{m-1}A_{m-2}\dots A_1)_i
f=[1,1,1,1]f'=[1,1,1,\dots 1],转置之:
ans=(fA1TA2TAmT)m+1ans=(f'A_1^TA_2^T\dots A_m^T)_{m+1}
现在转移变成了 (i,k)k(i,k)\to k 了,也类似地莫反转移即可(当然也可以直接转置掉 F1 的 dp)。

评论

1 条评论,欢迎与作者交流。

正在加载评论...