# 坐地铁 — 题解 ## 解法比较 出题人解法用堆选择当前边际收益最大的路段,用线段树维护等待余量,并一次压缩到下一个事件:预算用完、路段长度归零,或某站等待余量归零。后一事件把收益影响区间截断,需要更新后续候选。只在这些事件处重算,避免按预算单位逐次操作;下文的边际收益与事件数量证明沿用这一思路。 实现时,资源数为零的站无需等待给定时刻,应使用对应的有效门槛。单站、零预算和较大的累计时间也须正确处理。Codex(GPT-6)负责这些边界与实现说明。堆、线段树和事件批处理构成的算法为 $O(n\log(n+1))$ 时间、$O(n)$ 空间。 ## 到站时间与目标函数 列车不能返回。若 $\mathrm{Num}_i>0$ ,必须带走站点 $i$ 的资源,所以离站时刻不能早于 $T_i$ . 若 $\mathrm{Num}_i=0$ ,该站没有待装资源,生产时刻不限制离站。令有效生产时刻 $R_i=T_i$(数量为正)或 $R_i=0$(数量为零),并令 $R_n=0$ . 固定缩短后的行驶时间 $D_i$ ,不必要的等待只会推迟交付,因此最优到站时刻满足 $$A_1=0,\qquad A_{i+1}=\max(A_i,R_i)+D_i$$ 站点 $j$ 收到的资源总数为 $W_j=\sum_{i