對於一棵 最大線段樹, 每個節點包含乙個額外的 max 屬性,用於儲存該節點所代表區間的最大值。
設計乙個 modify 的方法,接受三個引數 root、 index 和 value。該方法將 root 為根的線段樹中 [start, end] = [index, index] 的節點修改為了新的 value ,並確保在修改後,線段樹的每個節點的 max 屬性仍然具有正確的值。
樣例
樣例 1
:輸入:"[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]",2
,4輸出:"[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]"
解釋:線段樹:[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]
如何呼叫modify
(root,2,
4), 可以得到:[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]
樣例 2
:輸入:"[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]",4
,0輸出:"[1,4,max=4][1,2,max=4][3,4,max=0][1,1,max=2][2,2,max=4][3,3,max=0][4,4,max=0]"
解釋:線段樹:[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]
如果呼叫modify
(root,4,
0), 可以得到:[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]
挑戰時間複雜度 o
(h), h 是線段樹的高度
/**
* definition of segmenttreenode:
* class segmenttreenode
* }*/class
solution
};
lintcode 203 線段樹的修改
對於一棵 最大線段樹,每個節點包含乙個額外的max屬性,用於儲存該節點所代表區間的最大值。設計乙個modify的方法,接受三個引數root index和value。該方法將 root 為根的線段樹中 start,end index,index 的節點修改為了新的 value 並確保在修改後,線段樹的...
lintcode203 線段樹的修改
題目描述 思路 線段樹的葉子節點就是陣列中每乙個位置的元素值,所以先找到要修改的位置,即先到達要修改的葉子節點,修改該節點的max值,然後再從葉子節點回到根節點,返回過程中,比較節點的左右孩子的max值,取兩者較大者作為本節點的max值,這樣無論value值和max值的大小關係,都作為一種情況考慮。...
線段樹的查詢 LintCode
對於乙個有n個數的整數陣列,在對應的線段樹中,根節點所代表的區間為0 n 1,每個節點有乙個額外的屬性max,值為該節點所代表的陣列區間start到end內的最大值。為segmenttree設計乙個 query 的方法,接受3個引數root,start和end,線段樹root所代表的陣列中子區間 s...