### TEST_166 将点集分为未移动的部分和移动过的部分维护,移动过的点按最后一次移动的 $o$ 分类维护 对于最后一次移动的 $o=1$ ($o=2$)的点维护 $x$ ($y$)的前缀的点数。 定义分界线为已进行的修改操作的 $(x,y)$ 的左下方区域的并的边界 移动过的点都在分界线上,未移动的点都在分界线上或右上方 分界线可以用若干段水平或竖直的线段表示,每次修改操作造成均摊 $O(1)$ 次线段插入删除,需要找出这次操作中首次发生移动的点,并维护发生变化的线段上的点。 以 $o=1$ 为例,需要删除若干竖直线段,合并多条水平线段,找出这次操作中首次发生移动的点。 查询 $(X,Y)$ 左下方的点数,如果 $(X,Y)$ 在分界线的左下方,则答案0,否则可以差分为查询 $(X,Y)$ 上方、右方、右上方的点数,右上方的点都没有移动过,可以在初始给的点集上查询矩形和,上方和右方可以在动态维护的未移动/移动过的点集中查询前缀和。 时间复杂度 $O((n+m)\log n)$