码迷,mamicode.com
首页 > 其他好文 > 详细

Segment Tree Modify

时间:2016-07-09 07:02:42      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

For a Maximum Segment Tree, which each node has an extra value max to store the maximum value in this node‘s interval.

Implement a modify function with three parameterrootindex and value to change the node‘s value with[start, end] = [index, index] to the new given value. Make sure after this change, every node in segment tree still has the max attribute with the correct value.

Example

For segment tree:

                      [1, 4, max=3]
                    /                        [1, 2, max=2]                [3, 4, max=3]
       /              \             /             [1, 1, max=2], [2, 2, max=1], [3, 3, max=0], [4, 4, max=3]

if call modify(root, 2, 4), we can get:

                      [1, 4, max=4]
                    /                        [1, 2, max=4]                [3, 4, max=3]
       /              \             /             [1, 1, max=2], [2, 2, max=4], [3, 3, max=0], [4, 4, max=3]

or call modify(root, 4, 0), we can get:

                      [1, 4, max=2]
                    /                        [1, 2, max=2]                [3, 4, max=0]
       /              \             /             [1, 1, max=2], [2, 2, max=1], [3, 3, max=0], [4, 4, max=0]
 
 1 /**
 2  * Definition of SegmentTreeNode:
 3  * public class SegmentTreeNode {
 4  *     public int start, end, max;
 5  *     public SegmentTreeNode left, right;
 6  *     public SegmentTreeNode(int start, int end, int max) {
 7  *         this.start = start;
 8  *         this.end = end;
 9  *         this.max = max
10  *         this.left = this.right = null;
11  *     }
12  * }
13  */
14 public class Solution {
15     /**
16      *@param root, index, value: The root of segment tree and 
17      *@ change the node‘s value with [index, index] to the new given value
18      *@return: void
19      */
20     public void modify(SegmentTreeNode root, int index, int value) {
21         changeAndUpdate(root, index, value);
22     }
23     
24     private void changeAndUpdate(SegmentTreeNode root, int index, int value) {
25         if (root.start == index && root.end == index) {
26             root.max = value; 
27             return;
28         }
29         
30         int mid = (root.start + root.end) / 2; 
31         if (mid >= index) {
32             change(root.left, index, value);
33         } else {
34             change(root.right, index, value);
35         }
36         root.max = Math.max(root.left.max, root.right.max);
37     }
38 }

 

Segment Tree Modify

标签:

原文地址:http://www.cnblogs.com/beiyeqingteng/p/5655096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!