Segment Tree Modify

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 }
时间: 2024-12-19 13:37:44

Segment Tree Modify的相关文章

Lintcode: Segment Tree Modify

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 parameter root, index and value to change the node's value with [start, end] = [index, index

Lintcode203 Segment Tree Modify solution 题解

[题目描述] 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 parameter root,index and value to change the node's value with[start, end] = [index,

lintcode-medium-Segment Tree Modify

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 parameter root, index and value to change the node's value with [start, end] = [index, index

P6035 Ryoku 的逆序对 (segment tree)

题目链接 题解: copy from: https://www.luogu.com.cn/blog/ryoku/ryoku-di-xin-nian-huan-le-sai-ti-xie segment tree, seg[i]为区间元素个数,每次从剩下的数中找第(b[i]+1)小的数,然后去掉次数(seg[i]=0). Code: 1 #include <bits/stdc++.h> 2 # define LL long long 3 using namespace std; 4 5 cons

Aizu 2450 Do use segment tree 树链剖分+线段树

Do use segment tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.bnuoj.com/v3/problem_show.php?pid=39566 Description Given a tree with n (1 ≤ n ≤ 200,000) nodes and a list of q (1 ≤ q ≤ 100,000) queries, process the queries in order and out

Segment Tree Build I &amp; II

Segment Tree Build I The structure of Segment Tree is a binary tree which each node has two attributes start and end denote an segment / interval. start and end are both integers, they should be assigned in following rules: The root's start and end i

Segment Tree Query I &amp; II

Segment Tree Query I For an integer array (index from 0 to n-1, where n is the size of this array), in the corresponding SegmentTree, each node stores an extra attribute max to denote the maximum number in the interval of the array (index from start

Segment Tree Build II

The structure of Segment Tree is a binary tree which each node has two attributes start and end denote an segment / interval. start and end are both integers, they should be assigned in following rules: The root's start and end is given by build meth

2-D range sum query implementation(2-D segment tree)

Google interview question:一个二维数组,有两个方法,一个是update(x,y),更新一个cell的值,一个是query(x1,y1,x2,y2),查询(x1,y1,x2,y2)矩形内所有元素的和. Senario 1. update调用次数远大于query. Senario 2. query调用次数远大于update. Senario 3. 两种方法调用一样多. 对于senario 1,只需要用一个二维数组储存数据,update相应的cell,时间复杂度O(1),qu