总结
\qquad 考成矢了……
时间安排
7 : 40 ∼ 8 : 00 \qquad 7:40\sim 8:00 7:40∼8:00 通读题面,发现 T 1 , T 2 T1,T2 T1,T2 可能有一点可做,打好了包子皮,对拍, r a n d o m random random 之后开 T 1 T1 T1。
8 : 00 ∼ 10 : 00 \qquad 8:00\sim 10:00 8:00∼10:00 发觉 T 1 T1 T1 貌似是个可持久化并查集?想着 cqyc 的题果然不一般……具体想了些细节后发现可持久化并查集实现起来是 O ( l o g 2 ) O(log^2) O(log2) 的,因为查询的时候得带个二分。然后跟旁边的 klz dalao 进行了一波“加密通话”:
我:好像要上大数据结构啊。
klz:对啊,我也觉得。
我:你想的也是那个吧?
klz:你想的也是吧?
我:但是复杂度不是很对啊?
klz:对啊,还需要那个(我以为是主席树上二分)。
我:对对对,还需要个那个(应和)。
\qquad 当时就觉得,这题绝对是这,稳了,但是发觉主席树上是不是不能二分?就想 klz 竟然连这都会,tql。于是打算先写一个 O ( n log 2 ) O(n\;\text{log}^2) O(nlog2) 的,拿个 80 p t s 80pts 80pts。写了一会后 czy 来“视察”了一下,说 klz 在上 csdn 爆搜?于是看了一看 klz 在搜什么。一看, O ( 1 ) O(1) O(1) 求 LCA \text{LCA} LCA,一下子慌了。主席树为什么要求 LCA \text{LCA} LCA?直接懵了,但是没管,继续写。写着写着发现,想用主席树来实现好像还得配个启发式合并,这样跟每次开个新树有啥差别?(其实也是 O ( n log 2 ) O(n\;\text{log}^2) O(nlog2) 的,但是当时没注意到)就先跳了,去写 T2 \text{T2} T2。
10 : 00 ∼ 11 : 10 \qquad 10:00\sim 11:10 10:00∼11:10 开 T 2 T2 T2,真就是一眼贪心。发现减号一点用没有,相当于讨论加乘怎么放最优。发现非 1 1 1 段一定全乘, 1 1 1 段一定符号相同,那就可以直接把相同段合并,然后讨论符号即可。发现若一个非 1 1 1 段的乘积很大,那么填乘号一定优,于是就讨论 1 1 1 段两边的非 1 1 1 段的乘积与和的大小,然后填符号(但是是错的),就写了,大概能过样例就交了。
11 : 10 ∼ 11 : 40 \qquad 11:10\sim 11:40 11:10∼11:40 简单打了 T3,T4 \text{T3,T4} T3,T4 的暴力,发现 T4 \text{T4} T4 交个包子皮都能拿分,很是逆天。
考试结果
0 + 20 + 16 + 1 = 37 p t s , Rank : + ∞ \qquad 0+20+16+1=37pts,\;\text{Rank}:+\infty 0+20+16+1=37pts,Rank:+∞, T1 \text{T1} T1 的 80 p t s 80pts 80pts 其实是可以微调过的,但是当时一度认为空间复杂度是 O ( n 2 ) O(n^2) O(n2) 的,就没继续调。考试时和 klz 的“加密通话”中,他说的算法指 Kruskal \text{Kruskal} Kruskal 重构树,以前学过,但是因为理解不够深所以不会。
考试总结
\qquad 因为题较难,就丧失了打部分分的信心,是失利的主要原因。题难导致心很慌,导致无法静心思考,所以发挥很烂。
\qquad 本场模拟赛还暴露出了一个很严重的问题:以前很多算法学的时候都是囫囵吞枣,没有深刻理解,导致运用不得不熟练。要好好复习一下以前学过的算法了。
题解
T1
\qquad 本题让求 [ l , r ] [l,r] [l,r] 中所有点连通的最小时间,相当于求 ∀ i ∈ [ l , r − 1 ] \forall i\in[l,r-1] ∀i∈[l,r−1], i i i 和 i + 1 i+1 i+1 连通的时间的最小值。有了这个转化,我们的问题也就变成了求 i i i 和 i + 1 i+1 i+1 连通的最小时间。这个问题显然可以用 Kruskal \text{Kruskal} Kruskal 重构树来解决,让 i i i 和 i + 1 i+1 i+1 的 LCA \text{LCA} LCA 的点权代表 i i i 和 i + 1 i+1 i+1 连通的最小时间,最后求一个区间最值即可。