题意
有 q q q 个操作,每个操作为以下两种:
- 给出 x , y x,y x,y,把点 ( x , y ) (x,y) (x,y) 加入到二维平面中
- 给出 x , y x,y x,y,询问点 ( x , y ) (x,y) (x,y) 在不在当前平面上的点构成的凸包内(上)
q ≤ 1 0 5 , − 1 0 6 ≤ x , y ≤ 1 0 6 q\le 10^5,-10^6\le x,y\le 10^6 q≤105,−106≤x,y≤106。
保证前三个操作是 1 1 1 操作。
分析
动态凸包模板题。
取一个点为基点,为避免误差,取前三个点的重心为基点。
然后用 s e t set set 维护其他点的极角序,极角序相同时按长度排序。
查询即是点在凸包内的模板,二分第一个在它上面的点,然后用叉积判断即可。
插入点时,首先判断点在不在凸包内,然后找到这个点的前驱和后继,往两个方向不断删点即可。
复杂度是 O ( n l o g n ) O(nlogn) O(nl