線段數簡單描述

2021-04-19 01:21:05 字數 950 閱讀 2009

—、線段樹的定義

在資訊學競賽中,經常遇到一些與區間操作有關的題目。比如統計若干個矩形的並集,計算若干區間線段的極值及總和等,這時就會用到「線段樹」這種特殊的資料結構。

線段樹是一棵二叉樹,記為t(a,b),引數a,b表示區間[a,b],其中b-a稱為區間的長度,記為l。線段樹t(a,b)也可遞迴定義為:

若l>1:[a,(a+b)div 2]為t的左兒子;

[(a+b)div 2,b)為t的右兒子。

若l=1:t為葉子結點。

至此,線段樹的結構和維護方法已經設計完畢.為了理清思路,我們再來總結一遍:

1.線段樹記錄的資訊

(])結點所表示區間的左右邊界;(1eft bound和right bound)

(2)結點左右孩子的位置;(1eft—child和right child)

(3)結點被覆蓋的次數;(occur)

(4)結點內覆蓋的履大值.(max)

2.線段樹的維護

(1) 左右邊界:

node—>left_child —>left_bound = node —>left_bound

node—>left_child—>right_bonnd = (node—>left_ bound + node—>rght_bound) / 2

node—>right_child—>left_bound = (node —>lef_bound + node—>right_bound) / 2 +1

node—>right_child—>right_bound = node—>right_bound

(2) 結點被覆蓋的次數:

insert(l, r, node):

if ( i <= node—>left_bound && r>= node—>right_bound )

node—>occur++;

else

例題 線段數 lazy

1 nkoj 1887 noip2012 day2 借教室 時間限制 40000 ms 空間限制 128000 kb 問題描述 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要 向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教...

Lazy Tag(線段數思想)

lazy tag思想,記錄每乙個線段樹節點的變化值,當這部分線段的一致性被破壞我們就將這個變化值傳遞給子區間,大大增加了線段樹的效率。在此通俗的解釋我理解的lazy意思 現在需要對 a,b 區間值進行加c操作,那麼就從根節點 1,n 開始呼叫update函式進行更新操作 如果剛好執行到乙個rt節點,...

線段數應用 poj2828

線段數應用 題目 buy tickets 題目大意 n個人排隊等待,第 i個人到來會有兩個資訊 pos i 0,i 1 val i 表明這 個人會插隊到 pos i 的後邊,這個人的值是 val i 依次給出 n個人的到來資訊,輸出最終的 佇列從頭到尾每個人的值。思路 第 i個人插入的位置是 pos...