關於資料結構之線段樹

2021-06-22 22:34:17 字數 789 閱讀 7779

這幾天都一直在看關於線段樹的題目還有題解,還有做題!以前也知道有線段樹這個東西,但是那時沒有好好的看,就看了個簡單的皮毛!所以現在又拿出來好好看看!

一開始看,一直看題解,還有就是模仿,首先看一遍,初步了解一下,然後就是按著別人的題解再抄著寫一遍直到通過測試,當然不是直接對著乙個乙個的copy上,然後就再理解,再自己寫,不看別人的**,最後出錯了先除錯,然後實在看不出來,就繼續把別人的**拿出來看看,理解理解!最後正確!再理解!直到理解這個題目,順帶理解線段樹!我這幾天就是用這樣的笨方法在學線段樹!也小有心得!

首先用線段樹的最終目的是減少程式的時間複雜度,能不向下更新或搜尋就不向下更新搜尋,這也就是線段樹具有高效的特點!一開始我自己寫的時候,一般都不會剪枝,最終和暴力一樣,沒能降低時間複雜度!線段樹每個節點中需要儲存的是什麼要根據題目來定!對於線段樹每次更新操作盡量不要一直更新到葉子節點,否則就等於沒有改變,程式花費時間還是很長,就沒有達到目的!

線段樹可以解決,像對於區間點更新和查詢,區間更新和查詢,還有就是像掃瞄線之類的等等,,,感覺對於點更新的都可以用樹狀陣列來做,樹狀陣列也是乙個神奇的東西!關於這個就是要多練習,題目見得多了,以後再遇到才能得心應手,才有思路!線段樹主要的就是每個節點需要存什麼,怎樣更新才能取到最優效果,怎樣延遲更新查詢,然後就是怎樣把更新過的正確合併,最後就是查詢操作得到最終結果!

都說勤能補拙,這話是真的對的!只有你足夠的付出,你才能夠得到你想要的結果!現在這個年紀就是想得多,做得少!拒絕這些壞習慣,從小事做起!還有就是不要眼高手低,拒絕眼高手低!不要認為看一遍會了就是會了,要親手實踐一下才是真理,才能檢驗自己到底是真會了還是假會了!加油!我為自己代言!

資料結構之線段樹

線段樹也叫區間樹,顧名思義,線段樹是一種基於區間的樹,每個節點表示乙個 線段 或 區間 樹的根節點表示是 整體 的區間,左右子樹分別表示這個區間的左半邊和右半邊。function 以節點v為根建樹 v對應區間為 l,r 線段樹的關鍵在於如何定義樹節點,以及如果構建 插入 樹節點。1.樹節點的定義 p...

資料結構之線段樹

一 引例 有m個數排成一列,做n次操作,每次操作包括 1 詢問指定區間的最大值 最小值 2 將指定區間的每個數加上乙個值 如果按照最樸素的做法,乙個個的遍歷,時間複雜度 o mn 那麼如何解決乙個區間求和 最大值,最小值 的問題呢?那麼就要用到線段樹啦。二 定義 線段樹是一種二叉搜尋樹,與區間樹相似...

資料結構之線段樹

線段樹是一種二叉查詢樹,它將乙個區間劃分為1個個單元,樹的每個節點都是1個單元。如下圖的樹就是一顆區間樹。性質 對於線段樹中的每乙個非葉子節點 a,b 它的左節點為 a,a b 2 右節點為 a b 2 1,b 線段數是平衡二叉樹,子節點的個數等於整個區間的長度。建樹 在這裡,我們使用陣列來實現簡單...