题目描述
题解
由于题目不强制在线,我们可以将所有询问离线解决。
思考如果只有一个询问如何解决?显然可以用二维前缀和搞定。
对于每个询问,我们只需要求出四个点的答案,假设对角坐标(左下和右上)为$(a,b),(c,d)$,我们只需要求出$(a-1,b-1),(c,b-1),(a-1,d),(c,d)$左下方的所有基站功率之和即可。
$n<=10^5$,直接$O(n^2)$暴力显然不可取。
假设我们目前求的点为$(x,y)$,需要统计的即所有满足$x_i<=x,y_i<=y$的基站权值之和。
(坐标数值较大,需要先进行离散化。)
可以先将基站的点和每个询问要求的点合在一起。维护一个一维的树状数组$t$,统计横坐标为$x$的基站功率和,按$y$从小到大先排序一遍,然后进行遍历,当遍历到基站时$i$时,对$x_i$进行单点加;当遍历到询问点$j$时,统计$1$~$x_j$区间和即可(此处$1,x_i,x_j$均为离散化后的横坐标),这样保证了两个条件($x<=x_j,y<=y_j$)
Code
1 |
|