T1 Cave Paintings
水在从下向上涨的时候可以看做是一些从不连通变为联通,因此可以等价为一种树形结构的填水方案。为什么是树而不是 DAG 呢?是因为两个同高度的块如果能联通到同一个更低高度的水格,那么它们就联通,应该缩成一个点。
维护一下连通性做树形 DP 即可。
代码
T2 Non-Decreasing Subsequences
朴素 DP 即为每次将
≤
a
i
\le a_i
≤ai 的位置的方案数加到
a
i
a_i
ai 上。设其中第
i
i
i 个位置产生的转移是
a
M
i
aM_i
aMi,则答案可表示为
(
1
,
0
,
…
,
0
)
M
l
M
l
+
1
⋯
M
r
(
1
,
1
,
…
,
1
)
T
(1, 0, \dots , 0) M_lM_{l+1}\cdots M_r (1,1,\dots,1)^\mathsf T
(1,0,…,0)MlMl+1⋯Mr(1,1,…,1)T,考虑预处理
(
1
,
…
,
0
)
M
k
−
1
⋯
M
1
−
1
(1, \dots, 0) M_k^{-1} \cdots M_1^{-1}
(1,…,0)Mk−1⋯M1−1 和
M
1
⋯
M
k
(
1
,
…
,
1
)
T
M_1 \cdots M_k (1, \dots, 1)^\mathsf T
M1⋯Mk(1,…,1)T 即可。
注意到本题中的
M
M
M 是稀疏的,只有
Θ
(
k
)
\Theta(k)
Θ(k) 个位置有值,因此它和一个矩阵的乘法复杂度是
Θ
(
k
2
)
\Theta(k^2)
Θ(k2)。
时间复杂度
Θ
(
n
k
2
+
q
k
)
\Theta(nk^2 + qk)
Θ(nk2+qk)。(事实上可以做到
Θ
(
n
k
log
k
+
q
k
)
\Theta(nk\log k + qk)
Θ(nklogk+qk),但是在本题的数据范围下可能没有什么意义)
代码
T3 Falling Portals
如果一头年想走到 y y y 比它大的传送门,那就要尽量换乘 x x x 较小的传送门以更快地接近,否则就要尽量换乘 x x x 尽量大的。
按照
y
y
y 排序一个个加入,用栈维护一个折线然后在上面二分即可得到相遇时间,正反两边就可以处理出两种情况的答案。时间复杂度
Θ
(
n
log
n
)
\Theta(n\log n)
Θ(nlogn)。
代码