1. 程式人生 > >Lintcode202 Segment Tree Query solution 題解

Lintcode202 Segment Tree Query solution 題解

roo where segment blog 之一 attribute 描述 完成 con

【題目描述】

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

對於一個有n個數的整數數組,在對應的線段樹中, 根節點所代表的區間為0-n-1, 每個節點有一個額外的屬性max,值為該節點所代表的數組區間start到end內的最大值。

為Segment Tree設計一個query的方法,接受3個參數root,start和end,線段樹root所代表的數組中子區間[start, end]內的最大值。

【註】在做此題之前,請先完成線段樹構造這道題目。

【題目鏈接】

www.lintcode.com/en/problem/segment-tree-query/

【題目解析】

這應該是Range Query的經典題目之一了。

此題可用Segment Tree來做的。 Segment Tree線段樹每一個節點都是一段線段,有start和end,然後還可以有其他的值,比如區間和sum,區間最大值max,區間最小值min。我們可以用自底向上構建二叉樹的方式構建Segment Tree,這個過程也有點類似於Bottom-up的merge sort,思想也是Divide and Conquer。完畢之後就可以在O(logn)的時間update,或者得到range Sum。

【參考答案】

www.jiuzhang.com/solutions/segment-tree-query/

Lintcode202 Segment Tree Query solution 題解