Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Definition of SegmentTreeNode:
- * public class SegmentTreeNode {
- * public int start, end, max;
- * public SegmentTreeNode left, right;
- * public SegmentTreeNode(int start, int end, int max) {
- * this.start = start;
- * this.end = end;
- * this.max = max
- * this.left = this.right = null;
- * }
- * }
- */
- public class Solution {
- /**
- *@param root, start, end: The root of segment tree and
- * an segment / interval
- *@return: The maximum number in the interval [start, end]
- */
- public int query(SegmentTreeNode root, int start, int end) {
- // write your code here
- if(start == root.start && root.end == end) { // 相等
- return root.max;
- }
- int mid = (root.start + root.end)/2;
- int leftmax = Integer.MIN_VALUE, rightmax = Integer.MIN_VALUE;
- // 左子区
- if(start <= mid) {
- if( mid < end) { // 分裂
- leftmax = query(root.left, start, mid);
- } else { // 包含
- leftmax = query(root.left, start, end);
- }
- // leftmax = query(root.left, start, Math.min(mid,end));
- }
- // 右子区
- if(mid < end) { // 分裂 3
- if(start <= mid) {
- rightmax = query(root.right, mid+1, end);
- } else { // 包含
- rightmax = query(root.right, start, end);
- }
- //rightmax = query(root.right, Math.max(mid+1,start), end);
- }
- // else 就是不相交
- return Math.max(leftmax, rightmax);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment