• Tidak ada hasil yang ditemukan

間隔データ構造

N/A
N/A
Protected

Academic year: 2023

Membagikan "間隔データ構造"

Copied!
9
0
0

Teks penuh

(1)

培訓- 7 間隔データ構造

間隔データ構造

c2251393

November 19, 2013

1 與線段樹

的 作的

的 用 的 變形

的 的

1.1 Dynamic Range Minimum Query

nS S 的 作:

1. Si a 2. min(Sl..Sr)

1.2

的 用 O(1) O(n) 的

加 的

n b nb

O(b) 的 的

?

I

(2)

1.3 線段樹 間隔データ構造

[l, r] 的 [l, r] 的 的

分 的 的 nb

2bO(nb +b)

b←√ n

1 7 2 2

5 16 1 3 7 12 26 17 32 55 2 6 7 99 12 2

標灰色的是詢問區間 [3,13] 的最小值所訪問的節點。

標灰色的是將第7個元素更新成3所影響到的節點。

黑色的是更新該區塊訪問到的節點。

1 3 2 2

5 16 1 3 7 12 3 17 32 55 2 6 7 99 12 2

實作

n std::vector

1.3 線段樹

加 變 ?

2k

( 2 ) 段的 (

3,4,,, ) 形 O(lgn) 的二 樹 的

的 2 的線段樹

的 的 O(lgn) 樹 的

的 的 O(lgn)

的 的 O(lgn)

II

(3)

1.4 二分搜 間隔データ構造

淺灰色的是詢問區間[2, 7]索取值的節點,深灰色的是走過的節點。

1

1 3

1 2 3 8

1 5 2 10 3 7 9 8

灰色的是將第3個位置修改成0所影響到及訪問到的節點。

1 → 0

1 → 0 3

1 2 → 0 3 8

1 5 2 → 0 10 3 7 9 8

1.4 二分搜

用線段樹 實作二 搜 樹 樹

[1, n] 段 的

的 的 insert 作

delete lower bound 的 的

1.5 線段樹的實作

線段樹

III

(4)

1.5 線段樹的實作 間隔データ構造

1. 的 ( )

2. 的 l

3. r

4. 的 ( )

5. 的 ( )

6. 的 : blahblahblah

線段樹的 作 : 與

的 的 實 ( 1 的 )

用 lazy tag( ) 的

O(nlgn)

的 ! 線段樹 O(lgn)

O(lgn) ! i

covi, mini 分 的 covi mini

的: 的 的

covi mini 的 的 covi

lazy tag

的 二分搜

的實作的 用 實作 實作的 的

的 5 的 的

用 的 二 樹的 i 的 2i

2i+ 1

的 作 timei updatei

IV

(5)

2.變形與推廣 間隔データ構造

Algorithm 1Operations on segment tree

1: procedureoperation(id, tl, tr, ql, qr, T)

2: if qr < tl∨ql > tr then

3: return

4: end if

5: if [tl, tr][ql, qr]then

6: work(id, tl, tr, ql, qr, T)

7: end if

8: mid← tl+t2 r

9: operation(2id, tl, mid, ql, qr, T)

10: operation(2id+ 1, mid, tr, ql, qr, T)

11: work(id, tl, tr, ql, qr, T)

12: end procedure

2 變形與推廣

線段樹的 變形與推廣 的 與

的BIT 的 的樹套樹 Functional

Programming OI 的 :

2.1 BIT(Binary Indexed Tree)

線段樹的 作 :(1) (2)

的 用 BIT 線段樹

BIT 實 ( 的 用 ) 的線段樹

用 的

BIT 的 實作 用

的 用 作

的 : k 的 的

(k−2i, k] i k 的lowbit k 二 0

的 lowbit C++ :i = k&-k

(0, k] (k −lowbit(k), k] 與 (0, k−lowbit(k)] 的

k BIT 的

k0 = k, kj = kj1 +lowbit(kj1) k 的 V

(6)

2.2 樹套樹 間隔データ構造

二 的 1 的 O(lgk) 的

O(lgk∗C) C 的 :

Algorithm 2Operations on BIT

1: function update(id, x, T)

2: whileid≤n do

3: T[id]←T[id] +x

4: id←id+lowbit(id)

5: end while

6: end function

7: function query(id, T)

8: res←0

9: whileid >0do

10: res←res+T[id]

11: id←id+lowbit(id)

12: end while

13: return res

14: end function

2.2 樹套樹

樹 樹 樹 樹 線段樹 BIT

的 線段樹套線段樹 (2 線段樹) BIT 套 BIT(2 BIT)

二 用 的 形的

的 2 線段樹 的 的 的

2.3

的 的 用

的 與 的 線

段樹 樹與

線段樹的 的

搜 的" "

線段樹 的樹

的樹 的 O(QN) ?

VI

(7)

3.應用 間隔データ構造

O(lgN)

的 的 的

O(N +QlgN)

: n 的 [l, r] k

n 105 用 線段樹的 的 :

1. 線段樹 的 用

merge sort 的 與 O(nlgn)

2. 二分搜 x [l, r] x

[l, r] 的 二分搜 x

O(lgk∗lgn∗lgn)

AC的作 用 線段樹 ?

1. i(1 i n) 用 的 線段樹 Ti 線段樹

的 [1, i] 的 Ti1

O(nlgn)

2. 線段樹 的

k 線段樹 二分搜 的

[l, r] 的線段樹 二分搜 線段樹 ?

n [1, i] 的線段樹 Tl1 Tr

線段樹 ( 的 )

O(lgn)

推廣 的

3 應用

用 的 的 ( 的

用的) 應用 ( 作 的 ) 的

的 的 的加

的 用 的

VII

(8)

3.1 加速選擇 間隔データ構造

3.1 加速選擇

DP Greedy 的 的 的

用 加速 的選擇

3.2

用 的 的

作 的 ( )

f :U7→N

用的 用 的 作 的

3.3

線 線 與 的 的

( )的 線 的

線 的 的 的

實用 的

3.4

的 樹的 樹 樹

變 的

的 樹 的 用" 樹 分" 的

樹 分的 樹 分 (Heavy

樹的 ) (Light 的 ) 的 ( ) 用

( 線段樹) 的 樹 的

用線段樹 作 作 樹

O(lgn)

樹 分 的 OI 的 分

的 的 ( XD)

VIII

(9)

4. Exercise!!! 間隔データ構造

4 Exercise!!!

1. The Bus(POI XII)

n(105) wix, y

2. Pairs(IOI 2007, HOJ 256)

1,2,3 n( 105) r

≤r

3. Sails(IOI 2007, HOJ 259)

n( 105) 線 的 hi( 105) 的

ki, 的 1 . 的 與 的

. 的 , 的

4. 形 (HOJ 12)

n(105) 與 的 形 形 的

5. Hiring(IOI 2009, HOJ 265)

n(5×105) 應 作 S Q

用的 的 ( )

W 的 的 的

6. (HOJ 154)

n(80000) (100000) [l, r] 的

7. (NPSC 2012 , HOJ 313)

n( 100000) [l, r]

≤S

8. Salesman(IOI 2009, HOJ 271)

的 H 加

t 的 r 加 的的 p (60% 的 t

r ) U 的

D H 加 H (

) ( 500000)

IX

Referensi

Dokumen terkait

付録 SOOC による TSP のキャスタ 計算言語SOOC-93 によって記述したTSP のキャ スタをしめす注12.まず,データ構造をつぎのよう に定義するここで,defelement マクロの構文は Common Lisp のdefstruct マクロにちかい. defelement city ; 元素citycity 型 の宣言 id x y next

プロトコルやネットワークの階層構造 要点 ■ 現実のネットワークは複雑であり, 工学的にも現象的にも階層構 造をつくっている. ■[工学的に] プロトコルを階層化することによって,低機能のプロト コルを利用して高機能のプロトコルがつくれる. ◆ たとえば,IP を利用して TCP, UDP などのプロトコルがつくれる. ◆OSI 基本参照モデルでは 7