Lintcode: Segment Tree Modify
2016-02-01 08:05
369 查看
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] to the new given value. Make sure after this change, every node in segment tree still has the max attribute with the correct value. Have you met this question in a real interview? Yes 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] Note We suggest you finish problem Segment Tree Build and Segment Tree Query first. Challenge Do it in O(h) time, h is the height of the segment tree.
/** * 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, index, value: The root of segment tree and *@ change the node's value with [index, index] to the new given value *@return: void */ public void modify(SegmentTreeNode root, int index, int value) { // write your code here if (root.start == root.end) { root.max = value; return; } int mid = (root.start + root.end)/2; if (index <= mid) modify(root.left, index, value); else modify(root.right, index, value); root.max = Math.max(root.left.max, root.right.max); } }
相关文章推荐
- 机器学习-贝叶斯学习(BayesLernen)
- 前端性能优化-域名解析
- 前端性能优化-域名解析
- Leetcode 55 - Jump Game
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- Spark Sort-Based Shuffle内幕彻底解密
- day02知识点回顾
- Lintcode: Segment Tree Query
- Linux/Unix 桌面趣事:终端上的圣诞树
- Hash-based Shuffle内幕彻底解密
- Heka–>Elasticsearch 索引数据过程的优化
- 继续node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ
- Leetcode: Verify Preorder Serialization of a Binary Tree
- Leetcode 53 - Maximum Subarray
- 什么样的程序员适合去创业公司
- 【blog算法原理】RANSAC和Flitline
- 【blog算法原理】Opencv中直线的表示方法
- [项目实战派]花40分钟写一个-CBIR引擎-代码公开
- 开始使用Google Analytics 示例
- Rails 使用 Google Analytics 示例