题意:平面上n个点,对每个点i求[1,i]中以(xi,yi)为圆心,ri为半径的所有点的权值和,保证数据随机。n<=1e5 |xi|,|yi|,vi,ri<=1e9
考虑分块,令取,将平面分割成m*m块。从前往后枚举每个点,对每个点都找出圆的轮廓所在的块(根据轮廓与块的边界的交点判断)。
1,对于轮廓所在的块,直接暴力枚举其中的点,答案加上满足距离小于等于半径的点的权值。可以发现,轮廓所在块的个数为O(m),而n个点会均匀散落在m*m个块内,所以每个块内的期望元素个数为O(1),所以这个部分的复杂度是O(m)。
2,对于在轮廓内部的块,要对每一行(或者列)求一次块的区间和。可以用树状数组维护区间和,这样的话复杂度为O(m*log(m))。考虑到每个点会有O(m)次查询,而只有1次修改,所以修改就直接O(m)地修改前缀和,查询就是前缀和做差,O(1)完成。这样修改和查询的复杂度都是O(m),所以这个部分的总复杂度也是O(m)。
最后复杂度就是