题目考察:排序,二分,前缀和。(但需要一定的思维)
题目简述:
给你 n 个点,第 i 个点的坐标是 (x_i,y_i),求有多少个点 (a,b) 使得 (\sum_{i=1}^n|x_i-a|+|y_i-b|)\le d。
数据范围:
1\le n\le 2\times 10^5
0\le d\le 10^6
\forall i\in[1,n],-10^6\le x_i,y_i\le 10^6
由于 X 坐标和 Y 坐标互不相干,所以我们分开讨论。
我们将 X 坐标和 Y 坐标分别排序。由于 |x_i-a|+|y_i-b|\le d 的点 (a,b) 才有贡献(i\in[1,n]),那么 |x_i-a|\le d 且 |y_i-b|\le d 的点才有可能做出贡献。
我们枚举 X 坐标,设 num_i 为当 X 坐标为 i-2\times 10^6 时 X 坐标与其他点的 X 坐标的距离,sumx_i 就等于 \displaystyle\sum_{j=1}^ix_i,那么 num_p 等于(下面的 id 指在序列中满足 x_{id-1}<p-2\times 10^6 且 x_{id}\ge p-2\times 10^6 的唯一的一个数):