Lintcode 線段樹修改

2022-06-22 17:33:12 字數 1458 閱讀 8436

yes樣例對於線段樹:

[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]

[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=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]

思路:首先清楚最大線段樹的定義,然後,還是利用線段樹的性質,分析清楚基準情形,利用遞迴來求解。

使用遞迴,雖然速度慢了些,但對於複雜問題,理解起來更容易,思路更清晰。

先找到index所在葉子節點,並修改該葉子節點的值,然後再從下往上依次更新其父節點的max值。

/**

* definition of segmenttreenode:

* class segmenttreenode

* }*/class solution

if(index>root->end||indexstart)

if(index==root->start&&root->start==root->end)

modify(root->left,index,value);

modify(root->right,index,value);

root->max=max(root->left->max,root->right->max);

}};

lintcode 203 線段樹的修改

對於一棵 最大線段樹,每個節點包含乙個額外的max屬性,用於儲存該節點所代表區間的最大值。設計乙個modify的方法,接受三個引數root index和value。該方法將 root 為根的線段樹中 start,end index,index 的節點修改為了新的 value 並確保在修改後,線段樹的...

lintcode203 線段樹的修改

題目描述 思路 線段樹的葉子節點就是陣列中每乙個位置的元素值,所以先找到要修改的位置,即先到達要修改的葉子節點,修改該節點的max值,然後再從葉子節點回到根節點,返回過程中,比較節點的左右孩子的max值,取兩者較大者作為本節點的max值,這樣無論value值和max值的大小關係,都作為一種情況考慮。...

lintcode203 線段樹的修改

對於一棵 最大線段樹,每個節點包含乙個額外的 max 屬性,用於儲存該節點所代表區間的最大值。設計乙個 modify 的方法,接受三個引數 root index 和 value。該方法將 root 為根的線段樹中 start,end index,index 的節點修改為了新的 value 並確保在修...