Description
n n n种车,每种车工作 x i x_i xi天就要维护 y i y_i yi,接下来m天,每天有两种操作:加入或者删去,问每天有多少车在维修
Solution
显然的是,每辆车存在一个周期
x
i
+
y
i
x_i+y_i
xi+yi,然后如果一辆车上去的
t
m
o
d
(
x
i
+
y
i
)
>
x
i
t\bmod(x_i+y_i)>x_i
tmod(xi+yi)>xi,那么这辆车就肯定是处于维修状态的,然后因为为周期性问题所以采取根号分治的做法:
对于
x
i
+
y
i
>
m
x_i+y_i> \sqrt m
xi+yi>m的,处于维修的时间不会超过
m
\sqrt m
m,对每一段都进行差分修改维护
对于
x
i
+
y
i
<
m
x_i+y_i<\sqrt m
xi+yi<m的,维护一个
g
i
,
j
g_{i,j}
gi,j,表示
t
≡
j
(
m
o
d
i
)
t\equiv j\pmod i
t≡j(modi)时,有
g
i
,
j
g_{i,j}
gi,j辆
x
i
+
y
i
=
i
x_i+y_i=i
xi+yi=i的车处于维修,于是加入删除操作就是对这个数组的+1或者-1
最后对两部分进行求和得到答案
Code
咕