洛谷P4169 [Violet]天使玩偶/SJY摆棋子

%%%神仙\(SJY\)

题目大意:

一个二维平面,有两种操作:

\(1.\)增加一个点\((x,y)\)

\(2.\)询问距离\((x,y)\)曼哈顿最近的一个点有多远

\(n,m\le 300 000,x_i,y_i\le 1 000 000\)

咱目前不会\(k-d\ tree\)先不提了,只讲\(cdq\)分治做法

考虑一个点如果在令一个点的右上方时,两点之间的曼哈顿距离可以转化为两个点到原点的曼哈顿距离之差,我们可以用这个方法加\(cdq\)分治求出每个询问左下角的点最近的曼哈顿距离

\(cdq\)分治时先按\(x\)排序,按\(y\)归并,按\(tim\)树状数组就可以秒了

那别的方向怎么办?

把整个矩阵转三次,然后跑\(4\)\(cdq\)不就完了

代码懒得放了,挺裸的自己脑补吧

猜你喜欢

转载自www.cnblogs.com/knife-rose/p/12045557.html