线段树.
- 考虑将 $L$ 离散化后,用线段树来维护每个清理工当前的工作长度.
- 若一个人将区间 $[L,R]$ 清扫后,被影响的人 $i$ 应该满足 $L<L_i\leq R$ 或 $R_i\geq L>L_i$ ,编号是一个区间.
- 显然不能直接修改,因为对它们的影响是不一样的.但对于所有影响到的 $L_i$ 相同的 $i$ 或所有 $R_i$ 相同的 $i$ 的影响是一样的,而这些人的编号也是一个区间.
- 于是可以用一个 $set$ 存储所有的三元组 $(l,r,pos)$ 表示编号在区间 $l,r$ 内的人,均满足 $L_i=pos$ .再用一个 $set$ 存储 $R_i=pos$ 的所有三元组.
- 修改时暴力取出所有的三元组,在线段树上修改后将它们合并成一个三元组放回去.而合并只会使区间变大,操作总次数是 $O(n)$ 的,所以时间复杂度是对的.
1 |
|