思路:
根号分治
根据$x+y$的值将火车分为两类:
若$x+y \geq \sqrt{m}$, 此时最多只有$\sqrt{m}$段维修时间段, 使用差分存储这些火车的维修时间段, 随时间推进维护其前缀和.
若$x+y < \sqrt{m}$, 维护一个二维数组$a_{i,j}$, 表示有多少$x+y=i$列车在第$j+ki$天维护. 这样的空间复杂度是$O(\sqrt{m}^2) = O(m)$
这样便可以在$O(\sqrt{m})$的时间上修改和查询, 空间复杂度为$O(n+m)$
注意修改差分时维护的前缀和的修改.
代码:
1 |
|