資料結構 線段樹

2022-07-15 10:21:15 字數 909 閱讀 5444

線段樹是一種重要的資料結構,它主要的優勢體現在對段的處理上,用於對資料的更新和查詢。適用範圍比樹狀陣列更廣。關於它的函式和離散化可以自己去搜尋一下。

例題:poj - 2182(

題目大意:有n個牛編號1~n,亂序排成一列,現輸入n,以及第2~n個位置上的牛前面有多少頭牛小於它的編號,然後正序輸出1~n位置上每頭牛的編號。如樣例:輸入5 1 2 1 0。表示五頭牛,2~5的位置上分別有1、2、1、0頭牛小於位置上牛的編號。輸出1~5位置上牛的編號:2 4 5 3 1。

題目思路:倒著判斷,有x頭牛編號小於某牛,則這個牛編號就應該位於剩餘位置的x+1個位置上,找到該編號,刪除,重複上述操作。我們可以在紙上寫一下,每個位置的讀入的a[i] 為:0 1 2 1 0,現在有1 2 3 4 5這幾個位置,然後從後開始讀,a[5]是0,位於第1個位置即編號為1,刪除編號,剩餘編號:2 3 4 5;下乙個數a[4]=1,位於第2個位置即編號3,刪除編號,剩餘:2 4 5;重複,a[3]=2,編號為5,剩餘:2 4;a[2] = 1,編號為4,剩餘2;a[1]=0,編號為2。於是正序輸出:2 4 5 3 1。

此題可用線段樹,若區間長度大於等於查詢的位置,則遞迴左子樹,否則遞迴右子樹,直到葉子結點,結點值就是初始編號。

**:

1 #include 2 #include 3 #include 4

using

namespace

std;

5int a[9000],ans[9000];6

struct

node

7s[30000

];10

void build(int root,int l,int

r)11

19int query(int root,int

k)20

28int

main()

29

資料結構 線段樹

啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...

資料結構 線段樹

一 目標 1.如何快速的查詢出下列陣列arr 2,5 的和 2。以及更新arr 4 為6。用普通的方法查詢的複雜度為o n 更新的複雜度為o 1 這時候我們可以用線段樹來快速完成這些操作,複雜度為logn。二 內容 如何建立,查詢,更新線段樹。public class qurqpd int tree...

資料結構 線段樹

線段樹是一顆平衡的二叉搜尋樹,他以空間換區時間,讓線性查詢加速log級別的查詢,用到的演算法主要是二分搜尋和遞迴。例如 有陣列data 我有乙個需求,我需要頻繁的查詢區間i j的sum和。這裡先給出兩個解決方案 如果使用最普通的演算法遍歷,那麼查詢和更新的複雜度為o n 當然你還可以使用動態規劃,定...