博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树查询 二
阅读量:5255 次
发布时间:2019-06-14

本文共 1951 字,大约阅读时间需要 6 分钟。

http://www.lintcode.com/en/problem/segment-tree-query-ii/

注意点:先考虑 给定区间和root区间的位置关系,然后将一些显而易见的结果返回;

    如果给定区间>root区间,将给定区间缩小至root区间大小。

    如果给定区间<=root区间, 那分别查询给定区间在root左右子树区间的结果。

    最后所有的结果统计总是通过叶节点的区间结果累计起来的。[0,0]],[1,1]...

 

1  public int query(SegmentTreeNode root, int start, int end) { 2      if(root == null) return 0; 3      int left = root.start, right = root.end; 4      if(start > end || start > right || end < left) return 0; 5       6      if((start == left && end == right)) return root.count; 7      if(left > start) start = left; 8      if(right < end) end = right; 9      if(left < right) {10          int count1 = query(root.left, start, end);11          int count2 = query(root.right, start, end);12          return count1 + count2;13      }14      return root.count;  //left == right15      16  }17  //九章18  public int query(SegmentTreeNode root, int start, int end) {19         // write your code here20         if(start > end || root==null)21             return 0;22         if(start <= root.start && root.end <= end) { // 相等 23             return root.count;24         }25         26         int mid = (root.start + root.end)/2;27         int leftsum = 0, rightsum = 0;28         if(start > root.end || end < root.start) return 0;29         // 左子区30         if(start <= mid) {31             if( mid < end) { // 分裂 32                 leftsum =  query(root.left, start, mid);33             } else { // 包含 34                 leftsum = query(root.left, start, end);35             }36         }37         // 右子区38         if(mid < end) { // 分裂 339             if(start <= mid) {40                 rightsum = query(root.right, mid+1, end);41             } else { //  包含 42                 rightsum = query(root.right, start, end);43             } 44         }  45         // else 就是不相交,mid不在start-end的区间范围内,说明,start-end仅在左子区或者右子区46         return leftsum + rightsum;47  }
View Code

 

  

转载于:https://www.cnblogs.com/ddcckkk/p/6811983.html

你可能感兴趣的文章
Linux - 配置php-fpm 以及 配置nginx支持php
查看>>
PHP封装验证类
查看>>
国内的Git比GitHub快
查看>>
layer父页面刷新
查看>>
【代理和协议】自我总结
查看>>
VMware学习笔记(一)
查看>>
仓鼠找sugar
查看>>
自增自减运算法的深入理解
查看>>
SQL插入数据insert
查看>>
myeclipse自动设置类和方法的注释(快捷键)
查看>>
iOS 9应用开发基础教程下册
查看>>
Hard Disk Drive(MBR)
查看>>
Jenkins执行selenium报错unknown error: cannot find Chrome binary
查看>>
咱可以去伦敦~ 参加那个什么奥林匹克吗
查看>>
双绞线的标准接法
查看>>
一些有用的SQL Server语句和存储过程
查看>>
源码分享-纯CSS3实现齿轮加载动画
查看>>
10个常见的 Android 新手误区
查看>>
spring mvc配置文件简单实现
查看>>
eclipse安装反编译插件
查看>>