题解:P17140 [NOI 2026] 线段(暂无数据)

· · 题解

简单题吧,与 BIM_XY 讨论了一会就会了。

最终树的形态绝对的是一条链上挂了一堆长度为 1 的链。

考虑对区间左端点排序后直接 DP。

dp_{i,r,R,t} 为考虑前 i 条线段,选择的线段次大的右端点为 r,最大的为 R,选了 t 条线段。

设第 i 条线段为 [l_i,r_i]

第一个转移式子,左端点在 (r,R] 内,右端点 \le R,此时只会改变 r,所以可以枚举每个 R,进行更新,dp_{i,r_i,R,t+1}=\sum_{r<l_i}dp_{i-1,r,R,t}

第二个转移式子,左端点在 (r,R] 内,右端点 > R,此时只会改变 R,所以可以枚举每个 r,进行更新,dp_{i,r,r_i,t+1}=\sum_{R<r_i}dp_{i-1,r,R,t}

第一维先给滚动数组滚掉,但是这还是不够。

发现因为随着 i 的增加,因为 l_i>r,所以随着 r 的转移,线段的编号是递增的。

这就说明其实我们不用记录线段编号,只考虑 r 的大小就行了!!!

那此时我们按照左端点排序的顺序枚举线段,就可以把 t 滚掉了!!!

空间复杂度 O(nm)

接着,你每次转移的时候考虑一下就是 rR 只有一个会被修改。

你分别维护 dp 数组两维的前缀和,然后每次前缀和数组的修改量是 O(mk) 的,所以就 O(nmk) 了。