月考考得稀撇 /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
i∑lengthi×vij∑[gcd(pi,j)=1][gcd(t,j)=1]=i∑lengthi×vij∑l∣j,l∣pi∑μ(l)r∣j,r∣t∑μ(r)=i∑lengthi×vil∣pi∑r∣t∑μ(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
D∑l∑r∣t∑μ(lD)μ(rD)[gcd(l,r)=1]⌊lrDn⌋i∑[lD∣pi]vi×lengthi=D∑l∑r∑μ(lD)μ(rD)d∣l,d∣r∑μ(d)⌊lrDn⌋i∑[lD∣pi]vi×lengthi=T∑d∣T∑μ(d)l∑r∑μ(Tl)μ(Tr)⌊lrdTn⌋i∑[lT∣pi]vi×lengthi
注意我们
r
r
r 是任意枚举的,最后对
r
T
∣
t
rT\mid t
rT∣t 的
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=rT∣t∑μ(Tr)⌊rldTn⌋i∑[lT∣pi]vi×lengthi
对所有
l
T
∣
p
i
lT\mid p_i
lT∣pi 的
p
i
p_i
pi 在
l
d
ld
ld 那排区间加
查询的时候枚举
r
r
r,对所有
r
T
∣
t
rT\mid t
rT∣t 的
t
t
t ,在
⌊
⌊
n
l
d
T
⌋
r
⌋
\lfloor\frac{\lfloor\frac{n}{ldT}\rfloor}{r}\rfloor
⌊r⌊ldTn⌋⌋ 作为系数只会有
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
T∑d∣T∑lT≤n∑lTn=T∑lognTnlogn=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
T∑rT≤n∑t∑rTn=T∑r∑(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(nnlogn+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(nnlogn),在
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,可能会优秀一点