题目描述
老C是个程序员。
最近老C从老板那里接到了一个任务——给城市中的手机基站写个管理系统。作为经验丰富的程序员,老C轻松地完成了系统的大部分功能,并把其中一个功能交给你来实现。
由于一个基站的面积相对于整个城市面积来说非常的小,因此每个的基站都可以看作坐标系中的一个点,其位置可以用坐标(x,y)来表示。此外,每个基站还有很多属性,例如高度、功率等。运营商经常会划定一个区域,并查询区域中所有基站的信息。
现在你需要实现的功能就是,对于一个给定的矩形区域,回答该区域中(包括区域边界上的)所有基站的功率总和。如果区域中没有任何基站,则回答0。
分析
这当然是离线扫描线啦~
单点加矩形求和,最最经典的离线扫描线问题了
一个树状数组就可以维护,真是又优雅又巧妙的算法~
说的好我选择主席树~
可持久化线段树/前缀和套线段树
(什么你不会主席树?,出门左转你站膜板区,包教包会)
(这里我们就默认你会了主席树,不会的话赶紧学一学,因为主席树真的很无脑)
嗯这道题就是前缀和套线段树了
因为我们发现直接离散化二维前缀和会T飞所以我们选择一维用线段树替代,另一位还是前缀和,所以我们的前缀和套线段树就是主席树了
我们考虑把x和y都离散化,然后以x为时间点,y为区间点依次在主席树上做n次单点加工作,(这里因为只是单点加所以可以标记永久化)
之后我们查询矩形区域的加法