题意
给你N个在二位平面上的整点(即横纵坐标都为整数的点),以及一个距离阈值D,求有多少个整点(x,y)满足Σ(abs(x-x[i])+abs(y-y[i])),(1≤i≤N)
思路
题目显然是要要求某个点到给定的N个点的曼哈顿距离之和,但是如果强行枚举点,根据数据范围显然是不可以通过的。那么我们仔细思考一下曼哈顿距离的性质,观察可得我们其实可以把一个二维问题拆维到两个一维问题。我们可以通过O(NlogN)的复杂度以内求得某个点距离这N个点的纵向距离之和并进行储存。然后我们在以相同的方式求一遍横向距离之和,对于每一个横向距离之和,我们都可以找到纵向距离之和的一个区间,统计这个区间桶有多少个元素即可。注意这里的查询是维护的一个区间信息,如果强行暴力循环就O(N*N)了,所以我们可以通过权值线段树来维护这个查询。至于在一个维度上求一个点到其他N个点的距离之和,我是通过前缀和加二分进行维护,就推导出了某个神秘公式,具体的看代码吧。
代码
https://atcoder.jp/contests/abc366/submissions/56570362