北大ACM教程-二维线段树
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
POJ 2155 Matrix 如果用二维树状数组,那么每次C操作(子矩阵取 反)的时间是O(n*n),太慢 所以要用二维线段树 X方向对应于外层线段树的节点,Y方向对应于内 层线段树的节Байду номын сангаас。每一个外层线段树的节点,都 对应一棵内层的线段树,所以空间复杂度是 O(n*n) 执行 C x1 y1 x2 y2 时先根据[x1,x2]访问一系列 被该区间覆盖的外层树节点,然后在被完整覆盖 的外层节点中,根据[y1,y2]再去访问内层线段树 。
所有性质与线段树类似,插入、删除、查找 等时间复杂度为O(logn*logm)。
POJ 2155 Matrix N * N 的矩阵,每个元素要么是0,要么是1,开 始全0 不断进行两种操作: 1) C x1 y1 x2 y2 表示要将左上角为(x1,y1),右下 角为(x2,y2)的子矩阵里的全部元素都取反(0 变1,1变0) (1<=x1<=x2<=n,1<=y1<=y2<=n) 2) Q x y 查询(x,y)处元素的值
二维线段树
可以用树套树方式实现,即每个外层线 段树的节点对应于一棵内层线段树。如 果外层线段树根对应的区间是x方向的 [1,n],那么内层线段树根节点对应的区间 是y方向的[1,m],那么整个线段树可以存 在一个n行m列的二维数组里。
也可以用一个外层线段树节点里存一棵内层 线段树的方式来实现。
二维线段树