PKUWC D1T3

月考考得稀撇 /kk
然后这题改了一年
L o s e r \mathcal{Loser} Loser
抄的 x g c xgc xgc 的题解 /se
∑ i l e n g t h i × v i ∑ j [ g c d ( p i , j ) = 1 ] [ g c d ( t , j ) = 1 ] = ∑ i l e n g t h i × v i ∑ j ∑ l ∣ j , l ∣ p i μ ( l ) ∑ r ∣ j , r ∣ t μ ( r ) = ∑ i l e n g t h i × v i ∑ l ∣ p i ∑ r ∣ t μ ( l ) μ ( r ) ⌊ n l c m ( l , r ) ⌋ \sum_ilength_i\times v_i\sum_{j}[gcd(p_i,j)=1][gcd(t,j)=1]\\=\sum_i length_i\times v_i\sum_j\sum_{l|j,l|p_i}\mu(l)\sum_{r|j,r|t}\mu(r)\\=\sum_i length_i\times v_i\sum_{l|p_i}\sum_{r|t}\mu(l)\mu(r)\lfloor\frac{n}{lcm(l,r)}\rfloor ilengthi×vij[gcd(pi,j)=1][gcd(t,j)=1]=ilengthi×vijlj,lpiμ(l)rj,rtμ(r)=ilengthi×vilpirtμ(l)μ(r)lcm(l,r)n
枚举 g c d ( l , r ) = D gcd(l,r)=D gcd(l,r)=D
∑ D ∑ l ∑ r ∣ t μ ( l D ) μ ( r D ) [ g c d ( l , r ) = 1 ] ⌊ n l r D ⌋ ∑ i [ l D ∣ p i ] v i × l e n g t h i = ∑ D ∑ l ∑ r μ ( l D ) μ ( r D ) ∑ d ∣ l , d ∣ r μ ( d ) ⌊ n l r D ⌋ ∑ i [ l D ∣ p i ] v i × l e n g t h i = ∑ T ∑ d ∣ T μ ( d ) ∑ l ∑ r μ ( T l ) μ ( T r ) ⌊ n l r d T ⌋ ∑ i [ l T ∣ p i ] v i × l e n g t h i \sum_D\sum_l\sum_{r|t}\mu(lD)\mu(rD)[gcd(l,r)=1]\lfloor\frac{n}{lrD}\rfloor\sum_i[lD|p_i]v_i\times length_i\\=\sum_D\sum_l\sum_{r}\mu(lD)\mu(rD)\sum_{d|l,d|r}\mu(d)\lfloor\frac{n}{lrD}\rfloor\sum_i[lD|p_i]v_i\times length_i\\=\sum_T\sum_{d|T}\mu(d)\sum_l\sum_{r}\mu(Tl)\mu(Tr)\lfloor\frac{n}{lrdT}\rfloor\sum_i[lT|p_i]v_i\times length_i Dlrtμ(lD)μ(rD)[gcd(l,r)=1]lrDni[lDpi]vi×lengthi=Dlrμ(lD)μ(rD)dl,drμ(d)lrDni[lDpi]vi×lengthi=TdTμ(d)lrμ(Tl)μ(Tr)lrdTni[lTpi]vi×lengthi
注意我们 r r r 是任意枚举的,最后对 r T ∣ t rT\mid t rTt t t t 有贡献
枚举一个 T T T,然后考虑枚举 d , l d,l d,l 处理贡献,我们把枚举好的东西以及系数丢掉不看
Ans t = ∑ r T ∣ t μ ( T r ) ⌊ n l d T r ⌋ ∑ i [ l T ∣ p i ] v i × l e n g t h i \text{Ans}_t=\sum_{rT|t}\mu(Tr)\lfloor\frac{\frac{n}{ldT}}{r}\rfloor\sum_i[lT|p_i]v_i\times length_i Anst=rTtμ(Tr)rldTni[lTpi]vi×lengthi
对所有 l T ∣ p i lT\mid p_i lTpi p i p_i pi l d ld ld 那排区间加
查询的时候枚举 r r r,对所有 r T ∣ t rT\mid t rTt t t t ,在 ⌊ ⌊ n l d T ⌋ r ⌋ \lfloor\frac{\lfloor\frac{n}{ldT}\rfloor}{r}\rfloor rldTn 作为系数只会有 n T r \sqrt{\frac{n}{Tr}} Trn 种不同的取值,每一个取值对应一个矩阵求和
计算区间加的个数
∑ T ∑ d ∣ T ∑ l T ≤ n n l T = ∑ T log ⁡ n n T log ⁡ n = n log ⁡ 3 n \sum_T\sum_{d|T}\sum_{lT\le n}\frac{n}{lT}\\=\sum_T\log n\frac{n}{T}\log n=n\log^3n TdTlTnlTn=TlognTnlogn=nlog3n
计算询问个数
∑ T ∑ r T ≤ n ∑ t n r T = ∑ T ∑ r ( n r T ) 1.5 = ∑ T ( n T ) 1.5 = n n \sum_{T}\sum_{rT\le n}\sum_{t}\sqrt{\frac{n}{rT}}\\=\sum_T\sum_r(\frac{n}{rT})^{1.5}=\sum_T(\frac{n}{T})^{1.5}=n\sqrt n TrTntrTn =Tr(rTn)1.5=T(Tn)1.5=nn
直接做扫描线是 O ( n n log ⁡ n + n log ⁡ 4 n ) \mathcal{O}(n\sqrt n\log n+n\log^4n) O(nn logn+nlog4n)

下面考虑根号分治
我们考虑在 T T T 较小的时候做扫描线,复杂度为 O ( n log ⁡ 2 T log ⁡ 2 n ) + O ( n n log ⁡ n ) \mathcal{O}(n\log^2 T\log^2 n)+O(n\sqrt n\log n) O(nlog2Tlog2n)+O(nn logn),在 T T T 较大的时候做二维前缀和,复杂度是 O ( n 2 T + n n ) \mathcal{O}(\frac{n^2}{T}+n\sqrt n) O(Tn2+nn ),所以 T T T 大概取 64 64 64,可能会优秀一点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值