You are on page 1of 18

Cc cu trc d liu c bit

Cc cu trc d liu c bit


Ch cn qua cu ni "Algorithms+Data Structures = Program" ca Niklaus Wirth ta c th thy
c tm quan trng ca cc loi cu trc d liu [data structures] trong gii cc bi ton tin. ng dng 1
cch thun thc hiu qu cc loi cu trc s em n nhng thun li v cng ln cho cc lp trnh vin.
Ngoi nhng cu trc d liu chun, quen thuc nh array, record, queue,... cn c 1 s cu trc d liu
khc c hiu qu c bit trong 1 s dng bi tp. Mc d vy, ti liu ting vit v nhng cu trc ny li
kh t, c bit l Interval Tree, Binary Indexed Tree v Range minimum Query. Trong chuyn ny s
cp ti 1 s loi cu trc thng xuyn c s dng: Interval tree, Binary Indexed Tree, Heap.
I. Interval Tree.
Interval Tree l 1 cu trc v cng hu dng, c s dng rt nhiu trong cc bi ton v dy s.
Ngoi ra Interval Tree cn c s dng trong 1 s bi ton hnh hc. C th ni nu nm r Interval Tree
bn lm c 1 na s bi ton v dy s ri y!.
Xin ni thm thc ra Interval Tree tn gi chnh xc l Segment Tree nhng ci tn Interval Tree c
s dng nhiu hn Vit Nam. Nu tm trong Introduction to Algorithms 2nd Edition th bn s thy 1
cu trc mang tn Interval tree nhng vi ni dung khc so vi nhng g s c trnh by di y.
Ta s xem xt 1 bi ton n gin sau hiu th no l cy Interval Tree:
Bi ton: Cho 1 dy s gm N phn t (N<=10000) ban u u mang gi tr 0. C 2 loi thao tc c
bn:
1. INC i gtr: tng gi tr phn t th i ln gtr n v.
2. GET L R: tm v tr v tng gi tr ca cc phn t t L ti R.
Trong file input c M<=100000 thao tc. Yu cu tng ng vi mi thao tc GET a ra kt qu
tng ng trong file output. D liu m bo cc kt qu trong phm vi longint.
Thut ton n gin nht cho bi ton ny l lm th thin: vi mi thao tc INC ta tng gi tr ca
A[i] v vi mi thao tc GET tnh li tng cc s trong on t L ti R. phc tp thut ton l
O(M*N) khng th chy c vi nhng test ln.
Vy lm cch no ci tin thut ton? Ta c th dng Interval Tree lm gim phc tp ca
php ly tng. Nu lm nh trn, mi thao tc GET s thc hin trong O(N), nu dng Interval Tree th
phc tp ch cn l O(logN), bng cch tnh trc 1 s on nh trong on [L,R] cn tnh v khi tnh
tng on [L,R] ch cn tnh tng cc on nh nm trong n.
Cu trc cy Interval c s dng c th m t nh sau:
- Gc ca cy l nt lu tng (tc l qun l) cc on trong khong t 1..N
- Xt 1 nt bt k lu tng on t L..R
+ Nu L=R nt ny khng c con
+ Nu L<>R, nt ny c 2 con: con tri lu tng on t L ti Mid v con phi lu tng on t
Mid+1 ti R, trong Mid=(L+R) div 2.
VD: nu 1 cy interval tree ca 1 dy c N=7 phn t th th miu t cy ny s c dng: (s ghi ti
mi nt l on phn t n qun l).

Cc cu trc d liu c bit

Khi thao tc GET on U,V c th vit n gin nh sau:


GET(U,V,L,R) {ly tng on U..V, ang xt on L..R}
1. if (VR) --> exit {ngoi on U..V}
2. if (U>L) and (V>R) ---> result+=A[L..R]; exit {thuc hon ton trong on U..V}
3. result+=GET(U,V,L,mid)+GET(U,V,mid+1..R); {on ang xt giao vi on cn ly tng}
V gi GET(U,V,1,n) vi result khi to bng 0.
D thy s ln thc hin quy nh hn O(2*logN) v th tc GET ny ch c gi tip khi on
L..R giao v khng thuc on U..V. Nh vy thao tc GET thay v thc hin trong O(N) nay c th
thc hin trong O(logN). Cn thao tc INC th sao? R rng thao tc INC khng ch n gin l cp nht
li phn t th I nh trc m ta cn phi iu chnh c cy Interval Tree sao cho ng vi m t.
update li cy Interval Tree vi mi thao tc tng gi tr phn t th I ta phi tng mi nt ca cy m
qun l I ln 1 gi tr gtr. Hm INC c vit li:
INC(i,gtr,L,R){xt nt L..R, cn tng I ln gtr n v}
1. if (L>i) or (R exit {khong ang xt khng cha i}
2. A[L..R]+=gtr{nt ny c cha I}
3. INC(i,gtr,L,mid)
4. INC(i,gtr,mid+1,R)
phc tp ca thao tc INC cng khng vt qu O(2*logN) v cao ca cy interval lun nh
hn logN.
Nh vy phc tp ca thao tc INC mc d tng t O(1) ln O(logN) nhng phc tp chung ca
bi ton ch cn li l O(MlogN) nhanh hn hn so vi thut ton th s ban u.
(Lu : y ch l bi v d, trn thc t c nhng cch nhanh hn x l bi ton ny m khng
dng ti interval tree).
Qua v d trn ta cng c th hiu qua phn no v cu trc v ngha s dng ca Interval tree: Gc
l nt lu ton b thng tin (m trong v d l tng) t 1 ti N, t gc thng tin 1 nt c chia nh ra
qun l 2 nt con tri v phi cho ti khi mi nt ch lu thng tin ca 1 phn t. Li ch trong phng
php s dng interval tree l vi 1 s on con ta c th ly trc tip c thng tin trong on con m
khng phi i ly thng tin trong tng phn t nh trong on, vic ny gip gim phc tp trong cc
thao tc t O(N) xung O(logN).
2

Cc cu trc d liu c bit


T tng ca Interval tree l dng chia tr: chia on ln thnh cc on nh hn c th
tr nhanh chng.
1 cu hi khc c t ra l lu tr interval tree trong thc t nh th no, v ta khng th hu nh
khng th b ra N^2 on lu cc on t L..R c, qu tn b nh vi N ln. Cu tr li l ta s
dng 1 mng 1 chiu lu tr interval tree:
Data for Interval Tree
1. Root lu on 1..N, c lu tr A[1].
2. Nu Node I lu on [L..R] v L
3. Th Node 2*I lu on [L..mid] v Node 2*I+1 lu on [mid+1..R].
cao ca interval tree lun nh hn hoc bng logN. Nh vy b nh dng cho interval tree l
O(2^(logN+1). Trong thc t c th khai bo mng O(N*3) hoc O(N*4) l . (Tt nhin cng c th
dng Linklist danh sch ng lu interval tree nhng cch ny tn b nh hn v khng tin bng,
khng hay c dng). Nhc im ca cch lu ny l ta khng th bit c on [L..R] c c lu
trn trong 1 nt khng v nu c th nt l nt no m buc phi lp li 1 qu trnh vi phc tp
O(logN) t gc ti on [L..R].
Cc thng tin c lu trong 1 node ca interval tree l thng tin tng hp ca on m n qun l,
bi vy thng tin ny phi l dng tch lu c, v d nh tng, hiu, min hoc max,...
T sau y ta gi chung cc thao tc sa cy Interval l cc thao tc UPDATE, cc thao tc ly thng
tin t cy l thao tc GET.
ng dng ca cy Interval tree a dng, phong ph v cng. Sau y ta s tm hiu mt s ng dng
c bn v hay gp nht. Mi v d s m t 1 cch s dng interval tree tng i khc nhau v thng
gp trong gii ton.
V d 1. Cc bi ton c bn ng dng Interval Tree:
a. Cho dy s, c 1 s yu cu thuc 2 loi thay i (tng/gn li) gi tr 1 phn t hoc tm min, max
cc on lin tip ca dy s: mi nt interval tree s lu gi tr min/max cc phn t n qun l.
b. Cho dy s, c 1 s yu cu gn thuc 2 loi li gi tr ca 1 phn t hoc tm tng 1 s phn t lin
tip ca dy. Bi ton tng t nh v d.
V d 2: POSTERS AMPPZ 2001.
Tm tt bi: C N tm poster chiu cao 1. Theo th t cc tm poster c dn ln 1 on tng
cng c chiu cao 1. on tng c xy bi cc vin gch 1*1, nh s t tri sang phi bt u t 1.
Cc tm poster s ph 1 on lin tip t vin gch Li ti vin gch Ri, tm poster c dn sau s ph
ln tm poster c dn trc. V vy, sau khi dn xong c N tm poster th c th c nhng tm poster
khng th c nhn thy.
Yu cu: m s loi poster khc nhau c th nhn thy c t ngoi vo.
Input: Dng u ghi N l s tm poster. Trong N dng tip theo mi dng cha 2 s Li v Ri th hin
u tri v u phi ca tm poster th i.
Output: Duy nht 1 dng ghi s loi poster c th nhn thy c.
Gii hn: N<=40000. Li,Ri<=10^9.
Hng dn:
Bi ton c th pht biu 1 cch d hiu nh sau: Cho dy s M phn t, c 1 s thao tc t mu cc
phn t ca dy s. Sau khi kt thc chui thao tc m s mu khc nhau ca dy s trn. Vi M nh, ta
3

Cc cu trc d liu c bit


ch cn lu li c mu ca cc phn t sau xem c bao nhiu mu khc nhau l c. Nhng nu xt
trong bi ton POSTERS ny, th M ca chng ta s c th ln ti gi tr 10^9. Do , ta phi lm nh li
gi tr ny. Bng cch no? Nhn xt vi 2 m gia chng khng c u mt ca tm poster no th chc
chn mu sc ca chng ging nhau. T ta thc hin trn tt c cc u mt ca cc on, sp xp tng
dn chng. Thay v phi xt tt c cc (c th ln ti 10^9 ) ta ch cn xt cc l u mt ca cc
on, s lng ny ch khong 80000 s, hon ton c th lu tr c. Phng php ta va p dng cn
c gi l phng php Ri rc ho, ng dng hiu qu nhiu trong cc bi ton khc nhau, nht l
khi s dng cc cu trc d liu c bit. ngha ch yu l vi 1 on ln cc phn t ging ht nhau,
khng cn xt mi phn t m ch xt 1 phn t i din. Sau y cc bn s cn gp nhiu bi ton s
dng phng php ny.
Tr li vi bi ton ca chng ta, by gi phi sa i mu cc phn t trong 1 on lin tip. Vi
gii hn M cn 80000 ta vn khng th lm th c, m s dng interval tree. V cui cng cn mu ca
mi phn t nn cy interval c xy dng phi bo m iu kin ly c mu ca cc phn t. C 2
hng lu tr cy interval nh sau:
1/ Ti mi nt lu mu chung ca cc phn t n qun l, khi to l mu 0. Chnh xc hn l mi nt
lu mu cui cng m n c sa, km theo thi gian n c sa thnh mu . Qu trnh sa mu vn
din ra bnh thng nhng kt hp thm cp nht thi gian. Mu ca 1 phn t khi l mu ca nt
qun l n m mu c cp nht mun nht. D thy gi tr ng l mu ca phn t ang xt. ly
mu ta ch cn i t gc ti nt cha duy nht phn t v chn mu c thi gian ln nht.
2/ Cy Interval lu khng chnh xc mu ca cc nt m ch lu 1 cch gn ng. 1 nt lu mu nu
l mu chung ca tt c cc phn t n qun l, ngc li lu gi tr (-1). Ta s kt hp qu trnh sa
ng li mu ch o cc phn t vo trong qu trnh cp nht v ly gi tr cc phn t. Trong qu trnh cp
nht, xt ti nt no thuc trong on c t mi mu th gn lun gi tr nt bng mu mi v kt
thc (tng t nh bnh thng), nhng nt cha ca nt ny c gn gi tr -1 (do mu cc nt con ca
n khng cn ging nhau). Trong qu trnh ly gi tr phn t, nu 1 nt cha mang gi tr dng th nt
con s mang gi tr ca nt cha thay v gi tr hin thi ca n, cp nht li mu cn din ra trc khi xt
ti cc nt con ca 1 nt.
2 cch lu trn u kh n gin v d hiu (theo ti cch u tin d hiu v d ci t hn cn cch
th 2 cn hiu r bn cht v t duy mch lc, nu khng s d nhm ln gi tr cc nt, nhng nu ci tt
s nhanh v tn b nh hn cch u). Bn nn th ci li bi ton theo c 2 cch nu v chn cch
ph hp nht cho mnh. Tng t hy ng dng cy interval vo trng hp tng/gim gi tr v tnh tng
1 s on lin tip ca dy s.
V d 3. MARS Map Baltic OI 2001.
Trn mt phng to c N hnh ch nht, c to cc nh trong khong t 0 ti 30000. Tnh din
tch phn mt phng mi im b ph bi t nht 1 hnh ch nht.

D liu

Dng u tin cha 1 s nguyn duy nht N (1 N 10000) l s bn c v.


Mi dng trong N dng tip theo m t mt bn , bao gm 4 s nguyn x1, y1, x2, y2 (0 x1< x2
30000, 0 y1< y2 30000), tng ng l ta ca nh di tri v nh trn phi ca bn .
Mi bn c dng hnh ch nht cnh song song vi trc ta .
4

Cc cu trc d liu c bit

Kt qa
Gm 1 s nguyn duy nht cho bit tng din tch c v bn .

V d
D liu:
2
10 10 20 20
15 15 25 30
Kt qa
225

Hng dn:
- V cc to u nguyn, nu ta chia mt phng thnh li cc vung th din tch phn b ph bi
cc HCN chnh l s vung thuc t nht 1 HCN. Nh vy ta ch cn m vi mi ct dc rng 1 n v
c bao nhiu vung nh vy l c.
- S b ph mi ct ch thay i khi cc HCN ph n thay i. Do nu gia 2 ct i,i+1 khng c
s thay i v cc HCN ph ln chng th s vung b ph 2 ct ny l bng nhau. S thay i ny ch
c khi c 1 cnh ca 1 HCN hon ton thuc trn ng thng ng gia 2 ct trn.
T 2 nhn xt trn ta i ti thut ton sau:
- B1: sp xp ch s v tr cc cnh thng ng ca cc HCN theo chiu tng dn, nhng ct thuc
gia 2 ch s lin tip s c s b ph bng nhau, ta ch cn m lng ny ri nhn vi s lng ct l
c. Do ch xt 1 ct ngay sau v tr 1 cnh l .
- B2: xt cc ct t tri sang phi, nu ln u tin gp 1 HCN (gp cnh dc tri ca n) th thm
on m n ph ct tng ng, nu l cnh dc phi ca HCN th loi b on m n ph. Mi ln
xt 1 ct m s lng b ph ca ct .
Ta dng interval tree cho qu trnh ny. Bi ton c th c pht biu li nh sau: Cho 1 dy s c N
s, c 1 s thao tc l tng hoc gim 1 s phn t lin tip ca dy ln 1 n v, sau mi thao tc hi dy
s c bao nhiu s ln hn 0. Vi gi tr max to = 30000 th gi tr N trn c th ln ti 30000, nu
gi tr ny ln hn s rt kh khn trong lu tr. Nhng ta cng c th p dng phng php ri rc ho
cc on lin tip ging nhau. Khi N ln nht ch bng s HCN, tc l 10000 m thi, bi ton lc ny
khc 1 cht: mi phn t km 1 hng gi tr, tnh tng hng gi tr cc phn t ln hn 0.
Vi cch pht biu ny bi ton tr nn gn gi hn v d dng gii quyt hn rt nhiu. Ch cn
lu km mi nt cy interval l s lng phn t dng n qun l. Phn cn li ca bi ton xin nhng
cho cc bn t gii.
Dng m rng ca interval tree:
Ta thy c sc mnh ca Interval tree trong x l bi ton dy s. Vy nu vi 1 bng s th sao?
Nu coi dy s l 1 on thng (1 chiu) th bng s c th coi nh 1 HCN (2 chiu), c s m rng thm
1 chiu na so vi dy s. Nh vy th hon ton c th dng Interval Tree theo 1 cch no x l
cc bng s. Cy Interval Tree khi thng c gi l Interval Tree 2D Cy interval tree 2 chiu.
Nu nh Interval Tree ch c 1 cch biu din thng dng v c dng (ti 99.9% cc bi ton dng cu

Cc cu trc d liu c bit


trc m t trn) th li c ti 2 cch hon ton khc nhau hiu v biu din Interval Tree 2D. Vy th
no l Interval Tree 2D? Xt v d sau:
V d 4: MATSUM - Al-Khawarizm 2006
Cho ma trn N*N. Ban u tt c cc ca ma trn u mang gi tr 0. Cc dng nh s t 1 ti N t
trn xung di, cc ct c nh s t 1 ti N t tri qua phi. C 1 trnh x l gm 3 thao tc chnh
trn ma trn:
1. SET x y num : gn gi tr ca (x,y) gi tr num
2. SUM x1 y1 x2 y2 : Tnh v in ra tng gi tr cc trong HCN tri di (x1,y1) v phi trn
(x2,y2) (x1<=x2, y1<=y2).
3. END : kt thc chng trnh.
Yu cu: vit chng trnh c vo cc lnh ca trnh x l, tnh v a ra kt qu ca cc thao tc
SUM.
Gii hn: N<=1024.
nh ngha HCN (x1,x2,y1,y2) l HCN gii hn bi 2 hng x1,x2 v 2 ct y1,y2
Cch 1: Qun l song song c 2 chiu:
Vi Interval tree th cc on c chia i chia i dn. S dng t tng ny trong Interval Tree 2D
th ta chia i theo c 2D-2direction hng v ct. Mi nt interval tree s qun l 1 bng HCN nh trong
bng HCN ban u v c chia thnh 4 nt con. VD: 1 hnh ch nht c chia lm 4 hnh nh hn:
Hay ni cch khc 1 nt (x1,x2,y1,y2) c th c ti a 4 nt con l (x1,mx,y1,my), (x1,mx,my+1,y1),
(mx+1,x2,y1,my), (mx+1,x2,my+1,y2) vi mx=(x1+x2)/2;my=(y1+y2)/2.

Cy ny hon ton tng t Interval tree, ta ch cn qun l theo 2 chiu, c th dng mng 1 chiu
hoc 2 chiu qun l tu .
p dng vo bi ton trn ta lu ti mi nt l tng gi tr cc m HCN qun l.
Cc hm GET v UPDATE c th vit hon ton tng t hm vi Interval tree, ch khc im t 1
nt s gi ti 4 nt con thay v 2. phc tp thut ton cho cc thao tc tr thnh O(LogM*logN) ch
khng phi l O(logN) na.
Cch 2: Qun l ln lt theo tng chiu:
Vi bng s M*N ta dng M interval tree qun l M hng ring r (lp cy T1). Ti nt (i,j) ca cy
lu hng K s lu tng cc t i ti j ca hng K. V mi hng u c N ct nn s nt mi cy con ny
l bng nhau. Gi s c P nt con trong mi cy con ny. Ta s dng lp cy T2 gm P cy interval na,
mi cy s qun l M nt: cy th P s qun l nt th P ca M cy interval trc . Vy gi tr cc
trong HCN s c truy xut nh th no? Vi 1 HCN (xL,xR,yL,yR) th u tin ta tm cc nt thuc
on (yL,yR) thuc lp cy T1. Vi mi nt truy xut d liu cy tng ng thuc T2 v trong on
6

Cc cu trc d liu c bit


t xL ti xR. Qu trnh UPDATE d liu cng tng t. phc tp thut ton dng ny cng l
O(logM*logN) cho mi thao tc UPDATE v GET.
2 cch biu din trn khc nhau nhng c cng phc tp khi x l.
Yu cu t vit cc chng trnh m t 2 dng ca cy Interval Tree 2D.
Bi tp t gii:
1. CUTSEQ Marathon 06-07.
Cho s nguyn N v mt dy s nguyn a1, a2, , aN. Nhim v ca bn l phi ct dy s trn thnh
mt s dy s (gi nguyn th t) tha mn:
- Tng ca mi dy s khng ln hn s nguyn M.
- Tng ca cc s ln nht trong cc dy trn l nh nht.
Input:
Dng u gm 2 s nguyn N v M.
Dng th hai gm N s nguyn ca dy a1, a2, , aN.
Output:
Gm mt s duy nht l tng ca cc s ln nht trong cc dy s trn. Nu khng c cch ct no
tha mn hai iu kin trn, in ra -1.
Gii hn:
-1 N 100000.
-0 ai 106.
-M< 263.
2. The BUS POI 2004.
Tm tt bi: Cho li vung M*N. Ti K nt (giao ca hng v ct) ca li c 1 gi tr GT>0,
cc nt khc gi tr bng 0. 1 ng i t (1,1) ti (M,N) ca li l ng i tho mn cc iu kin
sau:
- i theo cc cnh ca li vung, khng i theo cc ng cho.
- Ch c th i t nt (i,j) ti nt (i+1,j) hoc nt (i,j+1).
Gi tr ca ng i l tng gi tr ca cc nt thuc ng i. Tm ng i c gi tr ln nht v a
ra file output gi tr ny.
Input: dng u tin ghi 3 s nguyn M N K ngha trn. K dng tip theo mi dng ghi 3 s X Y GT
ngha l nt (X,Y) c gi tr GT.
Output: 1 dng duy nht ghi kt qu tm c
Gii hn:
-1<=M,N<=10^9.
-K<=10^5
-Kt qu trong phm vi longint.
3. POINTS and RECTANGES
Trong mt phng to cho N hnh ch nht v M im. 1 im c gi l thuc 1 HCN nu nh
im nm trong phn mt phng gii hn bi HCN .
Yu cu: lit k mi im trong s M im cho m thuc t nht 1 HCN.
Input:
Dng u ghi 2 s nguyn N M ngha nh trn.
7

Cc cu trc d liu c bit


N dng tip theo mi dng ghi 4 s nguyn x1 y1 x2 y2 m t 1 HCN vi nh tri di (x1,y1) v
phi trn (x2,y2).
M dng cui cng ghi to M im cho
Output: Ghi ra mi im tho mn (th t bt k).
Gii hn: 1<=M<=N<=20000.
4.Greatest sub sequence:
Cho dy s A gm N phn t (N<=50000,|Ai|<=15000). Hm GSS ca 1 on [x,y] c nh ngha
nh sau: GSS(x,y)=GTLN(tng Ai..Aj), vi mi x<=i<=j<=y. VD c dy s {-1,2,3} th GSS(1,2)=2,
GSS(1,3)=3, GSS(2,3)=5,
Yu cu: tnh gi tr hm GSS ca 1 s on cho trc.
II. Binary Indexed Tree
Trong nhng bi ton v dy s, 1 cu trc d liu thng c s dng thay th cho interval tree l
Binary Indexed Tree. Mc d vy, cu trc ca 1 cy Binary Indexed Tree li khc hon ton vi Interval
Tree. Tuy gi l tree nhng c v Binary Indexed Tree li ging 1 rng - gm nhiu cy hn l ging 1
cy. Cu trc ca Binary Indexed Tree c nh ngha 1 cch quy nh sau:
Binary Tree
1. i l: cha[i]=i+1;
2. i chn: cha[i]=cha[i div 2]*2;
Nh vy cha[i] khng ph thuc vo s nt ca cy m ph thuc trc tip vo gi tr I. Lu vi 1
cy N nt th vi i=1..N, cha[i]>n coi nh cha[i] khng tn ti.
Hnh minh ho sau s cho thy r hn cu trc ca 1 binary indexed tree:

Cng nh trong interval tree, thng tin c lu 1 nt binary indexed tree l thng tin ca n v tt
c cc nt con ca n (cc phn t cc nt ny b n qun l). Thng tin cc nt c tch lu dn dn
ln trn. Nhng thay v s nt rt nhiu nh cy interval, ta ch cn dng 1 mng O(N) lu tr ton

Cc cu trc d liu c bit


b thng tin d liu ca cy binary indexed tree. Ci thin v b nh ny gip ch ng k trong mi
trng b hn ch b nh, c bit trong Turbo Pascal khi m b nh ch l 64Kb.
Thng thng s dng binary indexed tree ch s dng 2 lnh c bn sau:
1. T nt I truy xut ti nt cha[i].
2. T nt I truy xut ti nt ln nht, nh hn I v khng l con ca I, gi l I.
Nu cn c vo nh ngha cha[i] ta c th xc nh 2 thng tin ny trong O(logN) nhng c 1 cch
hiu qu hn nhiu:
- truy xut ti cha[i] ta da vo cng thc c CM sau:
cha[i]= i + i and (i xor (i-1));
Cng thc trn l cng thc thng c mi ngi s dng nhng c nhng cng thc hiu qu hn:
cha[i]= i + i and (-i) = i + i and (1+not i)
- truy xut ti nt u tin khng l con ca I ta dng cng thc:
I= i - i and (i xor (i-1)) = i i and (-i) = i and (i-1);
Cc php ton c dng ch l +,- v cc php ton bit, thc hin nhanh hn nhiu so vi cc php
ton *,/ y cng chnh l im mnh v tc ca binary indexed tree so vi interval tree.
Vy, 2 php ton ny c dng lm g? n gin c th thy vic truy xut ti cha[i] l cp
nht thng tin c lu tr. V, ngc li, lnh th 2 chnh l dng ly thng tin. Da vo lnh ny ta
c th d dng ly c thng tin tng hp t tt c cc nt t 1 ti N: [thng tin 1..n]=A[n]+[thng tin
1..N], trong A[n] l thng tin lu tr ti N, du + biu hin cho s hp thng tin, i khi c th l
php nhn. Theo nh ngha N th cng thc trn ng.
V d: [thng tin 1..15]=A[15]+A[14]+A[12]+A[8].
phc tp trong mi ln ly thng tin khng vt qu O(logN+1).
Gii hn ca Binary Indexed Tree chnh l v lnh th 2 ch tc dng ly thng tin trong na khong
u tin l 1..I m khng cho ly thng tin tng hp oan I..J bt k trong O(logN) trong trng hp tng
qut. Do vy tc dng ca Binary indexed Tree cng b hn ch hn so vi Interval tree. Binary Indexed
Tree ch thc s tuyt vi trong cc trng hp sau:
- Thng tin c lu tr phi c tnh tch lu, nh tng, tch, gi tr min, max...
- Thng tin s dng lun nm trong na khong, hoc c tnh cng tr nhn chia c (trong trng
hp ny, thng tin c th ly trong cc on I..J bt k trong O(logN) v [thng tin (i..j)] = [thng tin (1..j)]
[thng tin (1..i)]).
Lu :
- Binary Indexed Tree cng c th p dng i vi 1 tp hp khng c nh nhng nu vi thng tin l
tm min/max th phc tp trong qu trnh cp nht thng tin s
- Vn c th ly thng tin trong on t I..J bt k trong cc trng hp cn li nhng vi phc tp
thut ton cao hn 1 cht, c O((logN)^2) nh sau:
Da vo nhn xt: thng tin lu ti I l thng tin cc nt t I+1 ti I (theo nh ngha I). Do c
th vit 1 function tng hp thng tin n gin nh sau:
Tonghop(i,j)
1. J=J and (J-1);
2. If (J+1>=I) tonghop=A[j]+tonghop(I,J)
3. otherwise tonghop=B[j]+tonghop(I,j-1).
9

Cc cu trc d liu c bit


Trong B[j] l thng tin ca J. i khi cch lm ny c th thay th cho 1 cch lm Interval tree
vi phc tp O(logN), thi gian chy cng khng lu hn l my nhng code ngn v n gin.
Ta cng c th kt hp Ri rc ho trong s dng Binary Indexed Tree v m rng Binary Indexed
Tree thnh cy 2 chiu. Cch s dng Ri rc ho chc khng cn xa l na, y xin ni thm v
Binary Indexed Tree 2D.
Xt bi ton x l trn ma trn M*N.
Chia ma trn M*N thnh N dy con, mi dy con l 1 hng. Dng M binary indexed tree lu cc
dy con ny. y l tp cy u tin(T1). Gi tr ca 1 nt l tng s cc n qun l. Sau s dng N
binary indexed tree (tp T2) qun l M cy trn. Cy th I ca tp N cy T2 ny s qun l tt c cc
nt th I ca M cy thuc tp T1.
Khi , gp 1 thao tc thay i, qu trnh update ln lt xy ra trn tp cy T1 ri ti tp cy T2. Gi
s update ti v tr (U,V):
Update_BIT2D(u,v)
1. Cp nht nt V ca cy th U trong tp T1.
2. Cp nht cy th V trong tp T2, nt bt u l nt U. {qtrnh ny din ra nh 1 cy bnh thng}
3. t=v+v and (-v). {t=cha[v]}
4. Update_BIT2D(u,t)
END
Qu trnh trn thc hin trong O(logM*logN) v c th tc gi update cy V trong tp T2.
Cn thao tc tnh gi tr HCN tri di (1,1) v phi trn (u,v) cng thc hin trong O(logM*logN) nh
sau:
Get2D(u,v)
1. GET+= gi tr nt U ca cy th V, tp T2
2. v=v-v and (-v).
3. GET+=GET_BIT2D(u,v)
END
Kt qu tr v trong bin GET.
Nh vy: GET(x1,y1,x2,y2) = GET2D(x2,y2) - GET2D(x1,y2) - GET2D(x2,y1) + GET2D(x1,y1).
Trong cc bi ton s dng cy lu gi tr vi ngha khc ta ch cn sa 1 cht trong hm GET
(bc 1) v trong hm cp nht cy thuc tp T2 l c.
Vy l ta bit v cch s dng Binary Indexed Tree 2D: hon ton tng t vi cy Binary Indexed
Tree bnh thng, ch khc 1 cht trong qu trnh x l 2 lp cy lng nhau.
Qua nhng trn ta thy c c im ca Binary Indexed Tree. Da vo cng c th thy:
mi bi ton lm c bng Binary Indexed Tree u c th lm c bng Interval Tree (nhng iu
ngc li trong 1 s trng hp khng ng).
hiu r cu trc ny hn v quan trng l ghi nh nhng cng thc nu, sau y l 1 s bi tp
ng dng. Sau khi lm bng Binary Indexed Tree, bn hy th lm vi Interval Tree so snh tc v
phc tp thut ton.
Bi tp t gii:
0. The BUS ( c nu trong phn bi tp v interval tree)
1. DNT Marathon 05-06 (IOIcamp.net)
10

Cc cu trc d liu c bit


Cho dy s A1, A2,..., An. Mt nghch th l 1 cp s u,v sao cho: uAv.
Yu cu: m s lng nghch th ca dy s cho.
Input: Dng u tin ghi s N l s lng s ca dy s. N dng tip theo ln lt ghi gi tr ca cc
s thuc dy.
Output: 1 s duy nht l s lng nghch th m c.
Gii hn:
- 1<=N<=60000
- 0<=10^9
2. MOBILE PHONES - IOI 2001.
Gi thit mt th h th 4 in thoi di ng (mobile phone) c cc trm lm vic nm trong vng
Tamperehot ng nh sau: Vng hot ng ny c chia theo li vung. Cc vung to thnh mt
ma trn SxS vi cc hng v ct c nh s t 0 n S-1. Mi vung cha mt trm lm vic. S
lng cc in thoi ang hot ng (active) trong mt vung s b thay i khi ngi s dng in
thoi di chuyn t ny sang khc hoc in thoi chuyn ch bt/tt. Theo thi gian, mi trm lm
vic s bo co s thay i s lng in thoi di ng ang hot ng trong khu vc kim sot ca mnh.
Hy vit chng trnhnhn cc bo co v tr li c cc yu cu v tng s in thoi di ng
ang hot ng trong mt vng khng gian hnh vung cho trc.
Input:
Dng u tin ghi 0 S l kch thc bng.
Trong 1 s dng sau, mi dng thuc 1 trong 3 dng sau:
- 1 X Y A : tng thm lng A vo s in thoi hot ng trong vung (x,y). A c th l s m
- 2 L B R T : yu cu cho bit tng s lng my in thoai hot ng trong vng HCN gc tri di
(L,B) v phi trn (R,T).
Kt qa
Vi mi ch th loi 2, in ra mt dng gm mt s nguyn dng tr li cho truy vn tng ng.
Gii hn

1 S 1024
Gi tr ca mt ti mi thi im lun thuc phm vi [0, 32767].
-32768 A 32767
S ch th thuc phm vi [3, 60002].
Tng s in thoi trn ton b bng khng vt qu 230.

V d
D liu
04
1123
20022
1112
1 1 2 -1
11

Cc cu trc d liu c bit


21123
3
Kt qa
3
4
3. TEAM SELECTION Balkan OI 2004.
Trong 1 cuc thi ln c N th sinh tham gia. Cuc thi ny gm 3 phn thi nh. Tt c N th sinh u
tham gia v c im s c 3 phn thi ny, im s 2 th sinh khc nhau trong 1 phn thi l khc nhau.
Sau khi cuc thi kt thc, BTC mun tm ra cc th sinh gii nht. Th sinh gii nht l th sinh khng km
hn bt k th sinh no khc. (Th sinh A c coi l gii hn th sinh B nu im s c 3 phn thi u cao
hn th sinh B).
Yu cu: cho bit im 3 phn thi ca N th sinh, m s th sinh c coi l gii nht trong k thi
trn.
Input: dng u tin ghi s N l s th sinh tham d. N dng tip theo dng th I ghi 3 s nguyn l
im tng mn thi ca th sinh th I.
Output: 1 dng duy nht ghi kt qu tm c.
Gii hn: N<=10000, im thi <= 10^9.
III. Heap
C th ni Heap l 1 cu trc hu dng vo bc nht trong gii ton.
Heap l 1 cu trc kh quen thuc, l 1 dng Priority Queue (hng i c u tin), ng dng to ln
trong nhiu dng ton khc nhau. V vy xin ch ni s qua v Heap:
Heap thc cht l 1 cy cn bng tho mn cc iu kin sau:
- 1 nt ch c khng qu 2 nt con.
- Nt cha l nt ln nht, mi nt con lun c gi tr nh hn nt cha.
iu kin quan h nh hn ca nt con so vi nt cha c th c quy nh trc tu theo bi ton,
khng nht thit phi l nh hn theo ngha ton hc, ngay c quan h "nt A<=> gi tr A>gi tr B"
cng hon ton ng. VD:
Mc d c m t nh 1 cy nhng Heap li c th lu tr trong mng, nt gc l nt 1, nt con ca
nt I l 2 nt 2*I v 2*I+1.
c im ca Heap:
- Nt gc lun l nt ln nht [theo nh ngha c trc]
- cao ca 1 nt lun nh hn hoc bng O(logN) v cy heap cn bng.

12

Cc cu trc d liu c bit


ng dng ch yu ca heap l ch tm min, max trong 1 tp hp ng, ngha l tp c th thay i,
thm, bt cc phn t. (nhng nh vy l qu J)
Cc thao tc thng dng trong x l HEAP:
-Up_heap: nu 1 nt ln hn cha ca n th di chuyn n ln trn
-Down_heap: nu 1 phn t nh hn 1 con ca n th di chuyn n xung di
-Push: a 1 phn t vo HEAP bng cch thm 1 nt vo cy v up_heap nt
-Pop: loi 1 phn t khi HEAP bng cch chuyn n xung cui heap v loi b, sau chnh sa li
heap sao cho tho mn cc iu kin ca HEAP.
Sau y l Code minh ho: bin top l s phn t ca heap, A l mng cha heap, doicho(i,j) l th tc
i ch 2 phn t i v j ca heap.
procedure Up_heap(i:longint);
begin
if (i=1) or (a[i]>a[i div 2]) then exit; {i div 2 l nt cha ca i}
doicho(i,i div 2);{i ch 2 phn t}
up_heap(i div 2);
end;
procedure down_heap(i:longint);
begin
j:=i*2;
if j>top then exit;
if (ja[j-1]) then j:=j+1; {chn nt ln hn trong 2 nt con}
doicho(i,j);
down_heap(j);
end;
procedure push(giatri:longint);
begin
inc(top);
a[top]:=giatri;{m rng v thm 1 phn t vo tp}
up_heap(top);{chnh li heap cho tho mn iu kin}
end;
procedure pop(vitri:longint);
begin
a[vitri]:=a[top];
dec(top);{loi 1 phn t ra khi heap}
{chnh li heap, nu phn t b loi lun u heap c th b up_heap}
up_heap(vitri);
down_heap(vitri);
end;
1 im c bit lu l trong qu trnh a 1 phn t ra khi heap ti v tr bt k phi thc hin c 2
qu trnh up_heap v down_heap m bo Heap vn tho mn iu kin cho.
13

Cc cu trc d liu c bit


Qua on chng trnh ta c th thy c cc iu kin ca HEAP vn c bo tn sau khi tp b
thay i.
Heap c s dng trong thut ton Dijkstra, Kruskal, Heap Sort nhm gim phc tp thut ton.
Heap cn c th s dng trong cc bi ton dy s, QH, th... Vi nhng v d sau ta s thy phn
no s a dng v linh hot trong s dng Heap. thun tin ta gi Heap-max l heap m gi tr nt cha
ln hn gi tr nt con (phn t t max l gc ca Heap) v Heap-min l heap m gi tr nt cha nh hn
gi tr nt con (phn t t min l gc ca heap).
Bi ton 1: MEDIAN (phn t trung v).
bi: Phn t trung v ca 1 tp N phn t l phn t c gi tr ng th N div 2+1 vi N l v N
div 2 hoc N div 2+1 vi N chn.
Cho 1 tp hp ban u rng. Trong file Input c M<=10000 thao tc thuc 2 loi:
1. PUSH gtr a 1 phn t gi tr gtr vo trong HEAP (gtr<=10^9).
2. MEDIANtr v gi tr ca phn t trung v ca tp hp (nu N chn tr v c 2 gi tr).
Yu cu: vit chng trnh a ra file OUTPUT tng ng.
Input: dng u tin ghi s M, M dng tip theo ghi 1 trong 2 thao tc theo nh dng trn.
Output: tng ng vi mi thao tc MEDIAN tr v 1 (hoc 2) gi tr tng ng.
Thut gii: Dng 2 heap, 1 heap (HA) lu cc phn t t th 1 ti N div 2 v heap cn li (HB) lu
cc phn t t N div 2 +1 ti N sau khi sort li tp thnh tng dn. HA l Heap-max cn HB l Heapmin. Nh vy phn t trung v lun l gc HB (N l) hoc gc ca c HA v HB (n chn). Thao tc
MEDIAN do ch c phc tp O(1). Cn thao tc PUSH s c lm trong O(logN) nh sau:
- Nu gtr a vo nh hn hoc bng HA[1] a vo HA ngc li a vo HB. S phn t N ca tp
tng ln 1.
- Nu HA c ln hn (/nh hn N) div 2 phn t th POP 1 phn t t HA (/HB) a vo heap cn li.
Sau qu trnh trn th HA v HB vn m bo ng theo nh ngha ban u. Bi ton c gii quyt
vi phc tp O(MlogM).
Bi ton 2: Lazy programmer NEERC western subregion QF 2004.
Tm tt bi: C N cng vic buc phi hon thnh trc thi gian D[i] (thi gian hin ti l 0). N
cng vic ny c giao cho 1 programmer li bing. Xt 1 cng vic I, bnh thng programmer ny
lm xong trong B[i] thi gian nhng nu c tr thm c($) th s lm xong trong B[i]-c*A[i] (nu
c=B[i]/A[i] th anh ta c th lm xong ngay tc khc, t=0). Tt nhin c<=B[i]/A[i]. Tin tr thm ny vi
tng cng vic l c lp vi nhau.
Yu cu: vi cc mng D[], B[] v A[] cho trc tm s tin t nht phi tr thm cho programmer
mi cng vic u hon thnh ng hn.
Input: Dng u tin ghi s N. Dng th I trong N dng tip theo mi dng ghi 3 s ln lt l A[i],
B[i] v D[i].
Output: tng s tin nh nht phi tr thm (chnh xc ti 2 c/s thp phn).
Gii hn: N<=10^5, 1<=A[i],B[i]<=10^4, 1<=D[i]<=10^9.
Thut gii: Nhn thy nu xt ti thi im T th mi cng vic c D[i]
T ta c thut gii sau:
1. Sp xp tng dn cc cng vic theo cc gi tr D[] ca chng
14

Cc cu trc d liu c bit


2. Dng 1 Heap-max lu cc cng vic theo gi tr A[], 1 mng C lu s tin cn c th tr thm
cho cc cng vic. Khi to C[i]=B[i]/A[i]. Khi xt ti cng vic I th a I vo Heap. Khi to tien=0;
Gi s ti cng vic I th khng hon thnh c trc D[i], cn tr thm tin cc cng vic t 1
ti I u c hon thnh ng hn. Ta ch cn tr thm sao cho I c hon thnh ng D[i], gi s l
T. Chn cng vic ng u trong heap c A[] t max, gi s l j. Lu thi gian lm 1 cng vic
lun dng. C cc trng hp xy ra l:
- C[j]*A[j]>T: C[j]-=T/A[j]; tien+=T/A[j];kt thc x l cng vic I.
- C[j]*A[j]=T: loi b j ra khi heap; tien+=C[j];kt thc;{thi gian lm j = 0}
- C[j]*A[j]
Kt qu ca bi ton chnh l tien.
Cng vic trn kt thc vi T=0 nn cng vic I c hon thnh ng hn. Mi cng vic trc I
u hon thnh ng hn nay hoc gi nguyn thi gian lm hoc c tr thm tin lm nn cng
lun hon thnh ng hn. V ta lun chn A[] ti u nn s tin phi tr cng ti u. Nh s dng Heap
nn phc tp ca thut ton l O(NlogN) (do mi cng vic vo v ra khi Heap khng qu 1 ln).
Bi ton 3: Connection - 10th polish olimpiad in informatics, stage II.
Tm tt bi: Cho 1 th v hng gm N nh v M cung. 1 ng i t a ti b l ng i i
qua cc cung ca th, c th lp li cc cung v nh i qua nhiu ln. Cn tm di ng i ngn
th k t a ti b cho trc.
Yu cu: gm 1 s cu hi, mi cu hi dng a b k phi tr v gi tr ng i ngn th k t a ti b.
Input: Dng u tin ghi 2 s N M. Dng th I trong M dng tip theo mi dng ghi 3 s a b l m t
cung th I ca th l cung t a ti b c di l. Dng th M+2 cha T l s cu hi. Trong T dng tip
theo mi dng ghi 3 s a b k m t 1 cu hi. Cc s trong input l s nguyn.
Output: T dng, dng th I l cu tr li cho cu hi th I.
Gii hn: N<=100, M<=N^2-N ( th khng c cung no t a ti a, c khng qu 1 cung t a ti b
bt k), 1<=k<=100, 0<=500, T<=10000. Nu t a ti b c nh hn k ng (i 1 khc nhau) th tr v
gi tr -1. VD: nu t 1 ti 2 c 4 ng di 2,4,4 v 5 th k=1, kt qu =2; k=2,3 kt qu =4; k=4 kt
qu = 5; k>4 kt qu = -1.
Gi thut gii: R rng ta phi tnh trc maxk=100 ng i ngn nht t a ti b.
Lm sao lm c iu ? Vi 1 nh dng thut ton DIJKSTRA tnh maxk ng i ngn
nht ti tt c cc nh cn li. Gi s ang xt ti nh U, C[u,v,k] l ng i ngn th k t u ti v. Vi
mi V <> U tnh C[u,v,k] ln lt vi k t 1 ti maxk (tnh xong gi tr c ri mi tnh ti gi tr mi),
k0[v] l gi tr k ang c tnh ca v (khi to k0[v]=1). Sau y l cc bc c bn ca thut ton:
CONNECTION(U)
1. Vi v=1..N, v<>u: Tm v: C[u,v,k0[v]] t GTNN, min=C[u,v,k0[v]].
2. Xc nhn C[u,v,k0[v]] l ng cn tm, K0[v]++.
3. Vi cc v m c ng t v ti v (di L) to thm 1 ng t u ti v di L=min+L, cp nht
ng i t U ti V.
End;
Cc bc 1 v 3 l ca thut ton Dijkstra thng thng. V cc gi tr min ch c xt 1 ln nn vi
mi ng i mi t U ti V ta u phi lu tr li, nhng, do ch cn tm maxk ng ngn nht nn ta
cng ch cn lu tr li maxk-k0[v] ng.
15

Cc cu trc d liu c bit


bc 3 vit r rng nh sau:
3.Update(v,L)
3.1. Tm ng di nht trong cc ng lu.
3.2. Nu ng ny ngn hn L kt thc.
3.3. Loi b ng ny.
3.4. Lu tr ng di L.
Tp cc ng c lu tr vi 1 nh V l tp ng, ta dng 1 heap-max lu tr tp cc ng
ny. Lc trong bc 1 th C[u,v,k0[v]] phi chn l min ca tp trn. C th kt hp 1 heap-min tm
nhanh C[u,v,k0[v]]. Cch ny ci t phc tp v i hi phi hiu r v heap. 1 cch khc n gin hn
l lun cp nht C[u,v,k0[v]] trong mi bc tm c ng mi:
3.Update(v,L)
1.2.3.4 {cc bc ny nh c}
5. Nu (L C[u,v,k0[v]]=L.
Nhng khi trong bc 2 ca thut ton ban u cn b sung nh sau:
2.a/ Xc nhn..., K0[v]++.
b/Nu K0[v]
phc tp ca chng trnh CONNECTION l O(N*K*logK). Phi gi N ln chng trnh ny nn
phc tp ca thut ton l O(N^2*K*logK). Lu khng nn dng thut ton Dijkstra kt hp cu trc
heap trong bi ton ny v th cho l 1 th dy.
Nhn xt: y l 1 bi hay v kh ng dng heap, im quan trng l nhn ra cch xy dng ln lt
cc ng ngn nht t nh ti ln v ng dng heap vo trong qu trnh ny.
Qua 1 vi v d trn cc bn c th thy phn no ng dng ca heap a dng trong cc bi ton nh
th no. Nhng chc khng khi c bn tht ln HEAP cng ch c vy, qu n gin, c tm min/max
th dng thi. l do thut gii c ti nu rt k nn n gin, nhng ngh c ra cch ng
dng heap khng d dng nh vy. 1 s bi ton luyn tp sau s gip cc bn hiu r hn:
1. Lightest language POI VI, stage III.
Cho trc 1 Tp Akgm k ch ci u tin ca bng ch ci (2<=k<=26). Mi ch ci trong tp Ak
c 1 khi lng cho trc. Khi lng ca 1 t bng tng khi lng cc ch ci trong t . 1
language ca tp Ak l 1 tp hu hn cc t c xy dng ch bi cc ch ci trong tp A, c khi
lng bng tng khi lng cc t thuc n. Ta ni 1 language l prefixless nu nh vi mi cp t
u,v trong language th u khng l tin t ca v (u l tin t ca v nu tn ti s sao cho v=u+s vi +
l php hp xu).
Yu cu: Tm khi lng nh nht c th ca 1 language gm ng N t v l 1 prefixless ca tp
Ak cho trc. (N<=10000).
Input: Dng u tin ghi 2 s N v K. Trong K dng tip theo mi dng ghi khi lng ca mi ch
ci trong tp Ak, theo th t t in bt u t a.
Output: Duy nht 1 dng ghi ra khi lng nh nht c th ca 1 ngn ng tho nhng iu kin trn.
V d:
Input
32
2
16

Cc cu trc d liu c bit


5
Output
16
(vi input trn, ngn ng c chn l L={ab,aba,b}
2. Promotion - VII Polish Olympiad In Informatics 2000, stage III
Cho 1 tp hp A gm cc s t nhin. Ban u tp A l tp rng. Trong N ngy, ngi ta ln lt lm
cc cng vic sau:
a/ Thm vo tp A 1 s cc s t nhin.
b/ Lu li hiu gia s ln nht v s nh nht ca tp A.
c/ Loi b 2 s ln nht v nh nht ra khi tp A.
Yu cu: cho bit danh sch cc s c thm vo mi ngy, tnh tng cc s c lu li sau mi
ngy. Bit trong tp A trc bc b lun c t nht 2 s.
Input: Dng u tin ghi s N. Trong N dng tip theo, mi dng ghi theo nh dng sau: s u tin
l s lng s c thm vo, sau ln lt l gi tr cc s c thm vo.
Output: 1 s duy nht l tng cc s c lu li
VD:
Input:
5
3123
211
4 10 5 5 1
0
12
Output:
19
Gi : 1 heap-min v 1 heap-max ca cng 1 tp ng, ci kh ca bi ton nm trong k nng ci t
2 heap ca cng 1 tp. Ngoi dng heap c th dng Interval Tree hoc Binary Indexed Tree.
3. BirthDay thi vng 2 TH, da trn bi thi IOI 2005.
SN Byteman ti! Cu mi c N-1 ngi bn ca mnh ti d tic SN. Cha m cu cng
chun b 1 ci bn trn ln dnh cho N a tr. Cha m ca Byteman cng bit 1 s a tr s gy n o,
m nu chng ngi cnh nhau. Do , nhng a tr cn c sp xp li. Bt u t Byteman, bn tr
c nh s t 1 ti N. Th t mi ca chng l 1 hon v (p1,p2,..pn) ca N s t nhin u tin
ngha l sau khi xp li a tr p(i) ngi gia a tr p(i-1) v a tr p(i+1), a tr p(n) ngi cnh a
tr p(1) v p(n-1). xp li, 1 a tr cn di chuyn 1 s bc qua tri hoc qua phi v v tr ph hp.
Cha m ca byteman mun nhng a tr di chuyn cng t cng tt - tc l tng di di chuyn ca N
a tr t GTNN. Tm gi tr ny.
Input: Dng u ghi s N, dng tip theo ghi N s l th t mi ca bn tr
Output: s bc di chuyn t nht tho mn
VD:
Input:
5
17

Cc cu trc d liu c bit


15432
Output:
6
Ngoi HEAP ra cn c 1 s loi Priority Queue khc nh Biominal Heap Priority Queue hay
Fibonacci heap... nhng rt phc tp, cc bn c th tm hiu thm cc ti liu khc

18

You might also like