地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3018
题意:在平面内最多又32768个点,现在有两种操作,1:在一些点上加上一个数n,2:询问一个矩形区域内的点的数的和
分析:这题一看像线段树,想离线搞,发现不好处理,也许可以,不过我是做不来了,后来自己YY了下二维的线段树,从来没写过= =,一开始发现空间会爆,再一想,其实很多节点是没必要增加的,然后就可以做了,大体思路如下:
每个节点保存一个矩形,还有这个矩形区域内的和,这个节点可以分为四个子节点,现在对于插入操作,直接不停的将矩形范围缩小,直到成为一个点,这样每个点最多带来log(n)个节点(n为离散化后x或y的数量),也就是总的节点个数为32768*logn,这样是完全可以的,而查找的话,跟线段树差不多,每次判断当前区域是否覆盖整个节点,是的话就返回这块区域的和,否则就递归与之有覆盖的子矩形。。。好吧,好久没写,表达能力又变差了,具体看代码,感觉练了一阵子的各种树,再写这样的题还是得心应手的^_^
代码:
/** head files*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include