该算法正确性未经检验,希望能由广大的谷民验证一下(毕竟代码量太大,而且难写难调)。
我们可以维护一颗平衡六叉树以解决该问题,满足:
- 有三个左儿子,三个右儿子。
- 将二维数点视为线段,l1,l2,l3,r1,r2,r3 分别表示三个左儿子和三个右儿子,l1 表示在该线段左侧不相交,l2 表示被该线段完全包含,l3 表示在该线段左侧相交,r1 表示在该线段右侧不相交,r2 表示完全包含该线段,r3 表示在该线段右侧相交。
- 实现平衡性,可以插入删除线段(二维数点)。
会场预约及强制在线动态二维数点便可以用这种方法通过。
同样的,三维、四维也可以通过增加维数的方式解决只是码量过大。
希望有大佬能够打出代码验证一下正确性,或者指出我的问题。