爲什麼要使用線段樹
最經典的線段樹:區間染色
有一面牆,長度爲n,每次選擇一段牆染色。
m次操作後,我們可以看見多少種顏色?
m次操作後,我們可以在[i,j]區間內看見多少種顏色?
使用數組實現 | 使用線段樹 | |
---|---|---|
染色操作(更新區間) | O(n) | O(logn) |
查詢操作(查詢區間) | O(n) | O(logn) |
另一類問題:區間查詢
查詢一個區間[i,j]的最大值,最小值,或者區間數字和
實質:基於區間的統計查詢
2017年註冊用戶中消費最高的用戶?消費最少的用戶?(動態更新)
區間是固定的,只是區間中的元素不一樣,所以可以直接用靜態數組。
線段樹不一定是完全二叉樹,但依然是一顆平衡二叉樹。