lintcode203 線段樹的修改

2021-10-02 14:48:24 字數 1962 閱讀 1256

對於一棵 最大線段樹, 每個節點包含乙個額外的 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...