题目描述
题解
刚开始想的是每一次只查询某一个点左下角离他最近的点,做4遍
这应该是可做的,但是为了练习stl (偷懒)想用set做,结果发现并不可做
因为貌似set的lower_bound只适用于一个关键字
splay可做!
后来得知了一种很强的方法
就是把一个点的坐标变成(x+y,x-y)
两个点的哈弗曼距离也就变成了两维的距离的max
按照一维排序了之后,维护multiset中的点在这一维的差不超过c,然后对于每一个点查询其左边离他最近的两个点(上下各一个),如果另一维也满足不超过c说明可以合并
用并查集搞一下就行了
…写了这么久…写splay也写完了啊…
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>