ZJOI
D1T2
对于每个节点我们算出它最后有 tag 的概率,这只需抽象成三个状态之间的转移:自己到祖先都没有 tag,自己有 tag,自己没有但祖先有。这几个转移的概率比较容易通过几种不同的区间来统计。
时间复杂度
Θ
(
n
log
k
)
\Theta(n\log k)
Θ(nlogk)。
D1T3
考虑只有连续段操作的话,答案就是 ∑ i max ( a i − a i − 1 , 0 ) \sum_i \max (a_i - a_{i-1},0) ∑imax(ai−ai−1,0),因此我们考虑把数分成 x i , a i − x i x_i, a_i-x_i xi,ai−xi 两拨,记
y i = max ( x i − x i − 1 , 0 ) z i = max ( a i − a i − 2 − x i + x i − 2 , 0 ) \begin{aligned} y_i &= \max(x_i - x_{i-1}, 0)\\ z_i &= \max(a_i - a_{i-2} - x_i + x_{i-2}, 0) \end{aligned} yizi=max(xi−xi−1,0)=max(ai−ai−2−xi+xi−2,0)
只需最小化 ∑ y i + ∑ z i \sum y_i + \sum z_i ∑yi+∑zi,考虑改写为线性规划:
x i , y i , z i ≥ 0 − x i ≥ − a i ( u i ) − x i + x i − 1 + y i ≥ 0 ( v i ) x i − x i − 2 + z i ≥ a i − a i − 2 ( w i ) \begin{aligned} x_i, y_i, z_i &\ge 0 \\ -x_i & \ge -a_i &(u_i)\\ -x_i + x_{i-1} + y_i &\ge 0 & (v_i)\\ x_i - x_{i-2} + z_i &\ge a_i - a_{i-2} & (w_i)\end{aligned} xi,yi,zi−xi−xi+xi−1+yixi−xi−2+zi≥0≥−ai≥0≥ai−ai−2(ui)(vi)(wi)
等价于对偶线性规划
u i , v i , w i ≥ 0 − u i − v i + v i + 1 + w i − w i + 2 ≤ 0 ( x i ) v i ≤ 1 ( y i ) w i ≤ 1 ( z i ) \begin{aligned} u_i, v_i, w_i &\ge 0 \\ -u_i - v_i + v_{i+1} + w_i - w_{i+2} &\le 0 & (x_i)\\ v_i &\le 1 & (y_i)\\ w_i &\le 1 & (z_i) \end{aligned} ui,vi,wi−ui−vi+vi+1+wi−wi+2viwi≥0≤0≤1≤1(xi)(yi)(zi)
最大化 ∑ i ( − a i ) u i + ∑ i ( a i − a i − 2 ) w i \sum_i (-a_i) u_i + \sum_i (a_i - a_{i-2}) w_i ∑i(−ai)ui+∑i(ai−ai−2)wi。
因此我们只需取 u i = max ( − v i + v i + 1 + w i − w i + 2 , 0 ) u_i = \max(- v_i + v_{i+1} + w_i - w_{i+2} , 0) ui=max(−vi+vi+1+wi−wi+2,0),对最近的一个 v v v,两个 w w w 值做 DP 就可以了。复杂度 Θ ( n ) \Theta(n) Θ(n)。
D2T2
容易想到对于任何一个不存在长为
k
k
k 的连续段的,已经获得了
r
r
r 张牌的方案,它都有
1
(
n
r
)
\frac1{\binom n r}
(rn)1 的概率被经过,并且期望停留
m
m
−
r
\frac{m}{m-r}
m−rm 的时间。对于一整段卡池长为
l
l
l,那么我们考虑末尾补一张牌必然没抽中,不存在长为
k
k
k 的段,其中计量没抽中的张数就可以用
[
z
l
+
1
]
1
1
−
u
z
1
−
z
k
1
−
z
[z^{l+1}]\frac1{1-u z\frac{1-z^k}{1-z}}
[zl+1]1−uz1−z1−zk1 表示,这一形式只需考虑求出
z
1
−
z
k
1
−
z
z\frac{1-z^k}{1-z}
z1−z1−zk 的复合逆,后拉格朗日反演即可。我们通过
F
1
−
F
k
1
−
F
F\frac{1-F^k}{1-F}
F1−F1−Fk 的快速复合计算,就可以牛顿迭代。
最后需要把一些多项式乘起来,因此总共的复杂度瓶颈是
Θ
(
m
log
2
m
)
\Theta(m\log^2 m)
Θ(mlog2m)。(恐怕
m
log
2
m
m\log^2 m
mlog2m 的部分比
m
log
m
m\log m
mlogm 的部分快多了)
代码