解题思路
本题考查加权区间调度:在半开区间不重叠的前提下最大化收益和。m≤2.5×105,需要 O(mlogm)。
- 按结束时间 b 从小到大排序。这样考虑前 i 个工单时,所有可能与第 i 个相接或更早结束的工单都在它前面一段前缀里。
- 设 dp[i] 为只考虑排序后前 i 个工单时的最大收益。对第 i 个工单(开始 a、结束 b、收益 w):
- 不选:值为 dp[i−1];
- 选:需要前面结束时间不超过 a 的工单(因为 [x,y) 与 [a,b) 在 y≤a 时不冲突),即 dp[k]+w,其中 k 是满足 bk≤a 的最大下标。
- k 可在已排序的结束时间上二分得到。dp[i]=max(dp[i−1],dp[k]+w)。