Arbori de intervale-Ginfo

5
focus GInfo nr. 15/4 - aprilie 2005 35 Arbori de intervale Un arbore de intervale este un arbo- re binar în care fiecare nod poate avea asociatã o structurã auxiliarã (anumi- te informaþii). Dându-se douã numere întregi st ºi dr, cu st < dr, atunci arborele de intervale T(st, dr) se construieºte re- cursiv astfel: considerãm rãdãcina nod având asociat intervalul [st, dr]; dacã st < dr atunci, vom avea aso- ciat subarborele stâng T(st, mij), respectiv subarborele drept T(mij + 1, dr), unde mij este mijlocul inter- valului [st, dr]. Intervalul [st, dr] asociat unui nod se numeºte interval standard. Frunzele arborelui sunt considerate intervale elementare, ele având lun- gimea 1. Un arbore de intervale este ilustrat în figura 1. Proprietate Un arbore de intervale este un arbo- re binar echilibrat (diferenþa absolutã între adâncimea subarborelui stâng ºi subarborelui drept este cel mult 1). Astfel adâncimea unui arbore de in- tervale care conþine N intervale este [log 2 N] + 1. Vom prezenta în cele ce urmeazã operaþiile specifice acestei structuri de date. Actualizarea unui interval din- tr-un arbore de intervale Vom prezenta pseudocodul unei pro- ceduri recursive cu ajutorul cãreia se poate insera un interval [a, b] într-un arbore de intervale T(st, dr) cu rãdã- cina în nodul nod. Cea mai eficientã metodã de sto- care în memorie a unui arbore de in- tervale este utilizarea unui vector fo- losind aceeaºi codificare a nodurilor ca ºi cea utilizatã în cazul heap-urilor binare. procedura Actualizare (nod, st, dr, a, b) dacă a st și dr b atunci modificã structura auxiliarã din nodul nod altfel mij [(st + dr) / 2] dacă a mij atunci Actualizare(2 · nod, st, mij, a, b) sfârșit dacă dacă b > mij atunci Actualizare(2 · nod + 1, mij + 1, dr, a, b) sfârșit dacă actualizeazã structura auxiliarã din nodul nod sfârșit dacă sfârșit procedură Interogarea unui interval din- tr-un arbore de intervale Vom prezenta în continuare pseudo- codul unei funcþii recursive care re- turneazã informaþiile asociate unui interval [a, b] dintr-un arbore de in- tervale T(st, dr) cu rãdãcina în nodul nod. funcţie Interogare (nod, st, dr, a, b) dacă a st și dr b atunci returnează structura auxiliarã din nodul nod altfel mij [(st + dr) / 2] Structuri de date Arbori de INTERVALE Dana Lica În cadrul acestui articol vom prezenta o structurã de date cunoscutã sub numele de arbore de intervale (engl. segment tree), precum ºi o serie de aplicaþii în geometria computaþionalã. Figura 1: Arbore de intervale

description

Arbori de intervale

Transcript of Arbori de intervale-Ginfo

Page 1: Arbori de intervale-Ginfo

focusG

Info

nr. 1

5/4

- ap

rilie 2

005

35

Arbori de intervale Un arbore de intervale este un arbo-re binar în care fiecare nod poate aveaasociatã o structurã auxiliarã (anumi-te informaþii).

Dându-se douã numere întregi stºi dr, cu st < dr, atunci arborele deintervale T(st, dr) se construieºte re-cursiv astfel:• considerãm rãdãcina nod având

asociat intervalul [st, dr];• dacã st < dr atunci, vom avea aso-

ciat subarborele stâng T(st, mij),respectiv subarborele drept T(mij +1, dr), unde mij este mijlocul inter-valului [st, dr].

Intervalul [st, dr] asociat unuinod se numeºte interval standard.Frunzele arborelui sunt considerateintervale elementare, ele având lun-gimea 1. Un arbore de intervale esteilustrat în figura 1.

ProprietateUn arbore de intervale este un arbo-re binar echilibrat (diferenþa absolutãîntre adâncimea subarborelui stâng ºisubarborelui drept este cel mult 1).Astfel adâncimea unui arbore de in-tervale care conþine N intervale este[log2 N] + 1.

Vom prezenta în cele ce urmeazãoperaþiile specifice acestei structuride date.

Actualizarea unui interval din-tr-un arbore de intervaleVom prezenta pseudocodul unei pro-ceduri recursive cu ajutorul cãreia sepoate insera un interval [a, b] într-unarbore de intervale T(st, dr) cu rãdã-cina în nodul nod.

Cea mai eficientã metodã de sto-care în memorie a unui arbore de in-tervale este utilizarea unui vector fo-losind aceeaºi codificare a nodurilor

ca ºi cea utilizatã în cazul heap-urilorbinare.

procedura Actualizare

(nod, st, dr, a, b)

dacă a ≤ st și dr ≤ b atunci

modificã structura auxiliarãdin nodul nod

altfel

mij ← [(st + dr) / 2]

dacă a ≤ mij atunci

Actualizare(2 · nod, st,

mij, a, b)

sfârșit dacă

dacă b > mij atunci

Actualizare(2 · nod + 1,

mij + 1, dr, a, b)

sfârșit dacă

actualizeazã structura auxiliarãdin nodul nod

sfârșit dacă

sfârșit procedură

Interogarea unui interval din-tr-un arbore de intervaleVom prezenta în continuare pseudo-codul unei funcþii recursive care re-turneazã informaþiile asociate unuiinterval [a, b] dintr-un arbore de in-tervale T(st, dr) cu rãdãcina în nodulnod.

funcţie Interogare

(nod, st, dr, a, b)

dacă a ≤ st și dr ≤ b atunci

returnează structura auxiliarã din nodul nod

altfel

mij ← [(st + dr) / 2]

Structuri de date

Arbori de INTERVALEDana Lica

În cadrul acestui articol vom prezenta o structurã de date cunoscutã subnumele de arbore de intervale (engl. segment tree), precum ºi o serie deaplicaþii în geometria computaþionalã.

FFiigguurraa 11:: AArrbboorree ddee iinntteerrvvaallee

Page 2: Arbori de intervale-Ginfo

GIn

fo n

r. 1

5/4

- a

pri

lie 2

005

36

focu

sdacă a ≤ mij atunci

Interogare(2 · nod, st,

mij, a, b)

sfârșit dacă

dacă b > mij atunci

Interogare(2 · nod + 1,

mij + 1, dr, a, b)

sfârșit dacă

returnează structura auxiliarãdin fiul stâng ºi din fiul drept

sfârșit dacă

sfârșit funcţie

Analiza complexitãþiiVom demonstra în continuare cã ope-raþiile prezentate mai sus au ordinulde complexitate O(log N) pentru unarbore de N intervale. Este posibil caîntr-un nod sã aibã loc apel atât pen-tru fiul stâng cât ºi pentru cel drept.Acest fapt determinã un cost adiþio-nal doar prima datã când are loc.

Dupã prima "rupere în douã",oricare astfel de "rupere" nu va adu-ce cost adiþional, deoarece unul dinfii va fi mereu inclus complet în in-tervalul [a, b]. Datoritã faptului cãînãlþimea unui arbore de N intervaleeste întotdeauna [log2 N] + 1, ordi-nul de complexitate al operaþiilorprezentate va fi O(log N).

Necesarul de memoriePentru a reþine în memorie un arborede intervale pentru N valori, avea ne-voie de N + N / 2 + N / 4 + N / 8 +… = 2 · N - 1 locaþii de memorie (sunt2 · N - 1 noduri).

Deoarece arborele nu este com-plet, trebuie verificat de fiecare datãdacã fiii unui nod existã în arbore(aceastã verificare a fost omisã în pse-udocodul prezentat anterior), altfels-ar încerca accesarea de valori dinvector care nu existã.

Dacã memoria disponibilã estesuficientã, se poate declara vectorulcare reþine arborele de intervale delungime 2K astfel încât 2K ≥ 2 · N - 1,simulând astfel un arbore complet ºinefiind necesare verificãrile menþio-nate mai sus.

AplicaþiiÎn cele ce urmeazã vom prezentaenunþurile câtorva probleme pentru a

cãror rezolvare arborii de intervalesunt utili.

Problema #1Se considerã N ≤ 50.000 segmente înplan dispuse paralel cu axele Ox ºiOy. Sã se determine care este numã-rul total de intersecþii între segmente.

În fiºierul segment.in se aflã peprima linie numãrul N al segmente-lor, iar pe fiecare dintre urmãtoareleN linii se aflã câte patru numere na-turale mai mici decât 50.000, repre-zentând coordonatele carteziene aleextremitãþilor fiecãrui segment.

Rezultatul se va scrie în fiºierulsegment.out.

Exemplusegment.in

5

2 9 13 9

4 6 12 6

1 2 6 2

5 0 5 8

7 5 7 11

segment.out

4

Timp de execuþie: 1 secundã/test

Algoritmi de "baleiere" (linesweeping)Folosind cunoºtinþe generale de geo-metrie analiticã se poate obþine unalgoritm cu ordinul de complexitateO(N2), dar acesta nu se va încadra înlimita de timp.

Pentru rezolvarea acestei proble-me vom folosi o tehnicã ce este cu-noscutã sub numele de "baleiere"(engl. sweeping) care este comunã

multor algoritmi de geometrie com-putaþionalã.

Pentru operaþia de baleiere, odreaptã de baleiere verticalã, imagi-narã, traverseazã mulþimea obiectelorgeometrice, de obicei de la stânga ladreapta.

Baleierea oferã o metodã pentruordonarea obiectelor geometrice, deobicei, plasându-le într-o structurãde date, pentru obþinerea relaþiilordintre ele.

De obicei, algoritmii de baleieregestioneazã douã mulþimi de date: • starea liniei de baleiere indicã rela-

þia dintre obiectele intersectate delinia de baleiere;

• lista punct-eveniment este o sec-venþã de coordonate x, ordonate dela stânga la dreapta de obicei, caredefinesc poziþiile de oprire aledreptei de baleiere; fiecare astfel depoziþie de oprire se numeºte puncteveniment; numai în punctele eve-niment se întâlnesc modificãri alestãrii liniei de baleiere.

Pentru unii algoritmi lista punct-eveniment este determinatã dinamicîn timpul execuþiei algoritmului.

SoluþieVom deplasa o dreaptã de baleiereverticalã, imaginarã, de la stânga ladreapta. Lista punct-eveniment vaconþine capetele segmentelor orizon-tale ºi tipul acestora (extremitatestângã sau extremitate dreaptã) ºisegmentele verticale.

Pe mãsurã ce ne deplasam de lastânga la dreapta, când întâlnim o ex-tremitate stângã o inserãm în stãriledreptei de baleiere, iar când întâlnimo extremitate dreaptã ºtergem extre-mitatea stângã corespunzãtoare dinstãrile dreptei de baleiere.

Când întâlnim un segment verti-cal, numãrul de intersecþii ale acestuisegment cu alte segmente orizontaleva fi dat de numãrul capetelor de in-tervale care se aflã în stãrile drepteide baleiere cuprinse între coordona-tele verticale ale extremitãþilor seg-mentului vertical.

Astfel, stãrile dreptei de baleieretrebuie sã fie reprezentate de o struc-

Page 3: Arbori de intervale-Ginfo

focusG

Info

nr. 1

5/4

- ap

rilie 2

005

37

turã de date pentru care avem nevoiede urmãtoarele operaþii:• Insereazã(y): insereazã extremitatea

y;• ªterge(y): ºterge extremitatea y;• Interogare(y1, y2) : determinã nu-

mãrul de extremitãþi cuprinse în in-tervalul [y1, y2]

Fie maxc valoarea maximã a coor-donatelor extremitãþilor de segmen-te. Folosind un vector pentru a im-plementa aceste operaþii vom obþineun ordin de complexitate O(1) pen-tru primele douã operaþii ºi O(maxc)pentru cea de-a treia.

Astfel, ordinul de complexitate alalgoritmului de rezolvare a proble-mei va fi O(N · maxc) în cazul celmai defavorabil.

Putem comprima spaþiul [0…maxc] observând cã doar maxim Nvalori din acest interval conteazã, ºianume extremitãþile segmentelor ori-zontale, astfel reducându-se ordinulde complexitate a celei de-a treia ope-raþii la O(N), dar algoritmul va aveaordinul de complexitate O(N2), ceeace nu aduce nici o îmbunãtãþire faþãde algoritmul trivial.

Aceastã situaþie ne determinã sãcãutãm o structurã de date mai efi-cientã. O primã variantã ar fi împãr-þirea vectorului în bucãþi de ele-mente, reducând astfel ordinul decomplexitate la O(N · ).

În continuare vom prezenta solu-þia bazatã pe arborii de intervale.

Vom folosi un arbore de inter-vale pentru a simula operaþiile, care

erau efectuate folosind un vector obiº-nuit, în timp logaritmic.

Astfel, în fiecare nod al arboreluidin intervale vom reþine câte extre-mitãþi existã în acel interval.

Primele douã operaþii vor fi im-plementate folosind procedura Ac-tualizare de mai sus pentru inter-valul [y, y] în arborele T(0, maxc) ºiadunând +1, respectiv -1 la fiecarenod actualizat.

Cea de-a treia operaþie poate firealizatã folosind funcþia Interoga-re pentru intervalul [y1, y2]. Astfel or-dinul de complexitate al algoritmuluise reduce la O(N · log maxc).

Folosind aceeaºi tehnicã de "com-primare" a coordonatelor se poateobþine ordinul de complexitate O(N· log N).

În figura 2 este prezentatã struc-tura arborelui de intervale, dupã ac-tualizarea pentru intervalele [2, 2],[6, 6] ºi [9, 9]. Sunt marcate interva-lele care conduc la obþinerea numã-rului de segmente intersectate de pri-mul segment vertical, obþinute în ur-ma interogãrii pentru intervalul [0, 8].

Problema #2(preluatã de la IOI '98 - Portugalia)

Se considera N ≤ 50.000 dreptun-ghiuri în plan, fiecare având laturileparalele cu axele Ox ºi Oy.

Lungimea marginilor (contururi-lor) reuniunii tuturor dreptunghiuri-lor se va numi perimetru.

Sã se calculeze perimetrul celorN dreptunghiuri.

În fiºierul drept.in se aflã peprima linie numãrul N al dreptun-

ghiurilor, iar pe fiecare dintre urmã-toarele N linii se aflã câte patru nu-mere naturale, mai mici decât 50.000,reprezentând coordonatele cartezie-ne ale colþurior stânga-sus, respectivdreapta-jos, ale fiecãrui dreptunghi.

Rezultatul va fi scris în fiºieruldrept.out.

Exempludrept.in

3

3 8 8 3

6 10 12 6

12 4 15 1

drept.out

44

Timp de execuþie: 1 secundã/test

SoluþieFolosind un raþionament asemãnãtorcelui utilizat în cazul primei proble-me, constatãm necesitatea unui algo-ritm de baleiere.

Vom descompune problema îndouã subprobleme: prima datã calcu-lãm perimetrul folosind doar laturilestânga ºi dreapta ale dreptunghiurilorpentru a calcula perimetrul pe axa Oy;iar apoi putem sã rotim dreptunghiu-rile ºi sã folosim acceaºi procedurãpentru a calcula perimetrul pe axaOx, folosind doar laturile sus ºi josale dreptunghiurilor.

Fiecare laturã (stângã sau dreap-tã) va fi un punct eveniment. Sortãmlaturile crescãtor în funcþie de coor-donata orizontalã ºi începem parcur-gerea de la stânga la dreapta.

În momentul în care întâlnim olaturã stângã marcãm în stãrile drep-tei de baleiere, intervalul de unitãþiocupat de laturã pe axa Oy, iar cândîntâlnim o laturã dreaptã demarcãm

N

N

FFiigguurraa 22:: AArrbboorree ddee iinntteerrvvaallee ppeennttrruu pprroobblleemmaa ##11

Page 4: Arbori de intervale-Ginfo

GIn

fo n

r. 1

5/4

- a

pri

lie 2

005

38

focu

sîn stãrile dreptei de baleiere interva-lul de unitãþi ocupat de laturã.

Între oricare douã puncte eveni-ment consecutive are loc o modifica-re a perimetrului total pe axa Oy.

Astfel, dupã fiecare actualizare astãrilor dreptei de baleiere se va reþi-ne numãrul de unitãþi marcate pânãîn prezent (nu se þine cont dacã o uni-tate este marcatã de mai multe ori).

De fiecare datã vom aduna la pe-rimetrul total pe axa Oy diferenþaabsolutã între numãrul de unitãþimarcate pânã în prezent ºi valoareaimediat anterioarã (înaintea actuali-zãrii) a numãrului de unitãþi marcate.

Aºadar, este necesarã o structurãde date care se efectueze urmãtoareleoperaþii în timp eficient:• Marcheazã(a, b): marcheazã inter-

valul [a, b];• Demarcheazã(a, b): demarcheazã

intervalul [a, b];• Interogare: returneazã numãrul to-

tal de coordonate marcate pânã înprezent

Putem utiliza un arbore de inter-vale pentru a obþine un ordin de com-plexitate O(log maxc) sau O(log N)pentru primele douã operaþii ºi O(1)pentru ce-a de treia.

În fiecare nod al arborelui reþi-nem de câte ori a fost marcat interva-lul respectiv ºi câte unitãþi din inter-valul respectiv au fost marcate.

Primele douã operaþii pot fi im-plementate folosind procedura Ac-tualizare, iar a treia operaþie va re-turna valoarea numãrului de unitãþicare au fost marcate din rãdãcina ar-borelui de intervale.

În figura 3 este descrisã structuraarborelui de intervale, dupã marcareaintervalelor [3...8] ºi [6...10] (un inter-val [y1…y2] reprezintã intervalul deunitãþi [y1, y2 - 1] din arbore).

Problema #3Se dau N ≤ 100.000 puncte în plan alecãror coordonate sunt numere natu-rale mai mici ca 2.000.000.000.

Sã se rãspundã la M ≤ 1.000.000întrebãri de forma "câte puncte din-tre cele N existã în dreptunghiul cucolþul stânga-sus în punctul de coor-donate (x1, y1) ºi colþul dreapta-jos înpunctul de coordonate (x2, y2)?"

În fiºierul puncte.in se vor aflape prima linie numerele N ºi M. Peurmãtoarele N linii se aflã coordona-tele punctelor. Pe urmãtoarele M li-nii se vor afla câte patru numere na-turale reprezentând coordonatelecolþurilor dreptunghiurilor.

În fiºierul puncte.out se vor aflaM numere naturale reprezentând rãs-punsurile la întrebãri.

Exemplupuncte.in

6 1

2 8

5 3

6 5

8 7

8 1

10 10

4 8 9 4

puncte.out

2

Timp de execuþie: 1 secundã/test

SoluþieProblema determinãrii numãrului depuncte din interiorul unui dreptunghieste o particularizare 2D pentru pro-blema numitã în literatura de specia-litate Orthogonal Range Search.

Varianta aleasã pentru acest caz,constã într-un arbore de intervale, ca-re permite determinarea numãruluide puncte din interiorul unui drept-unghi folosind un algoritm cu ordi-nul de complexitate O(log2 N).

Astfel, se sorteazã coordonatele xale punctelor ºi se construieºte un ar-bore de intervale. Primul nivel al ar-borelui va conþine toate coordonatelex.

Cei doi fii ai rãdãcinii vor conþi-ne prima jumãtate, respectiv a douajumãtate a punctelor (sortate în func-þie de coordonata x) º.a.m.d. Pentrufiecare interval de coordonate x, semenþin sortate coordonatele y cores-punzãtoare punctelor care au coor-donatele x în intervalul respectiv.Astfel, memoria folositã are ordinulO(N · log N).

Pentru a construi efectiv se folo-seºte o abordare asemãnãtoare algo-ritmului de sortare prin interclasare:în fiecare nod, pentru a obþine listade coordonate y ordonate, se inter-claseazã listele celor doi fii (deja or-donate). Când se ajunge într-o frun-zã, lista nodului este formatã dintr-unsingur punct.

Pentru fiecare dreptunghi, se efec-tueazã cãutarea în arborele de inter-vale pentru segmentul [x1, x2] (deoa-rece se folosesc doar cele N coordo-nate x ale punctelor, se vor potrivicapetele acestui interval folosindcãutarea binarã la cea mai apropiatãcoordonatã x de fiecare extremitate). FFiigguurraa 33:: AArrbboorree ddee iinntteerrvvaallee ppeennttrruu pprroobblleemmaa ##22

Page 5: Arbori de intervale-Ginfo

focusG

Info

nr. 1

5/4

- ap

rilie 2

005

39

Pentru fiecare interval din arboreatins, se executã douã cãutãri binareprintre coordonatele y corespunzã-toare coordonatelor x din acel inter-val, pentru a determina câte punctedin intervalul respectiv se aflã în in-tervalul [y1, y2] (adicã în interioruldreptunghiului).

Structura arborelui de intervaleutilizat este prezentatã în figura 4.

Ordinul de complexitate O(log2

N) poate fi redus, folosind o metodãdescoperitã independent de Willardºi Lueker în anul 1978. Se observã cãpentru fiecare coordonatã y dintr-unnod, dacã presupunem cã se efectuea-zã o cãutare binarã, atunci putem de-termina în timpul interclasãrii poziþiadin fiecare fiu pe care o va returna cã-utarea binarã pentru aceeaºi valoare.

Este evident cã pentru o valoarey dintr-un nod, care a provenit din-tr-un fiu în timpul interclasãrii, exis-tã o unicã valoare maximã y' dincelãlalt fiu astfel încât y' ≤ y. Aºadar,pãstrãm pentru fiecare valoare y din-tr-un nod doi indici care identificã

poziþiile corespunzãtoa-re efectuãrii unei cãutãribinare în fii pentru va-loarea y.

Astfel, în timpul cã-utãrii, în loc sã efectuãmcãutãri binare, se pot par-curge aceºti indici careoferã în timp constantpoziþia în lista cãutatã,reducând ordinul decomplexitate la O(logN). Procedeul este ilus-trat în figura 5.

Probleme propusePrezentãm în cele ce urmeazã enun-þurile a patru probleme care pot fi re-zolvate folosind arborii de intervale.

Problema #4Olimpiada Balticã de Informaticã, 2001

Se considerã N ≤ 50.000 dreptunghiuriîn plan, fiecare având laturile paralelecu axele Ox ºi Oy. Sã se determinearia ocupatã de reuniunea celor Ndreptunghiuri.

În fiºierul drept2.in se aflã peprima linie numãrul N al dreptun-ghiurilor, iar pe fiecare dintre urmã-toarele N linii se aflã câte patru nu-mere naturale mai mici decât 50.000,reprezentând coordonatele cartezie-ne ale colþului stânga-sus, respectivdreapta-jos ale fiecãrui dreptunghi.

Rezultatul se va scrie în fiºieruldrept2.out.

Problema #5Olimpiada Naþionalã de Informaticã,

Polonia, 2001

Se considerã N ≤ 50.000puncte care au coordo-nate numere naturalemai mici decât 50.000.Sã se determine poziþiaîn care se poate aºezaun dreptunghi de lun-gime DX ºi lãþime DY,astfel încât numãrul depuncte incluse în drept-unghi sã fie maxim.

În fiºierulpuncte2.in se aflã peprima linie numerele N,DX ºi DY. Pe urmãtoa-

rele N linii se aflã coordonatele punc-telor.

În fiºierul puncte2.out se vor gã-si cinci numere naturale reprezentândcoordonatele colþurilor stânga-sus ºidreapta-jos ale aºezãrii dreptunghiu-lui ºi numãrul maxim de puncte dindreptunghi.

Problema #6Baraj pentru lotul naþional, 2003

Se considerã N ≤ 100.000 puncte careau coordonate numere naturale maimici ca 100.000. Sã se determine un-de se pot aºeza douã dreptunghiuride lungime DX ºi lãþime DY, fãrã sãse intersecteze, astfel încât numãrulde puncte incluse în cele douã drept-unghiuri sã fie maxim.

În fiºierul puncte3.in se aflã peprima linie numerele N, DX ºi DY.Pe urmãtoarele N linii se aflã coor-donatele punctelor.

În fiºierul puncte3.out se vorafla nouã numere naturale reprezen-tând coordonatele colþurilor din stân-ga-sus ºi dreapta-jos ale celor douãdreptunghiuri, precum ºi numãrulmaxim de puncte incluse în acestea.

Problema #7USACO, ianuarie 2004

Se considerã N ≤ 250.000 dreptun-ghiuri în plan, fiecare având laturileparalele cu axele Ox ºi Oy, care nuse intersecteazã ºi nu se ating, darpot fi incluse unul în altul. Se nu-meºte închisoare un dreptunghi în-conjurat de alte dreptunghiuri. Sã sedetermine numãrul maxim de drept-unghiuri de care poate fi înconjuratão închisoare ºi câte astfel de închisorimaxime existã.

În fiºierul inchis.in se aflã peprima linie numãrul N al dreptun-ghiurilor, iar pe fiecare din urmãtoa-rele N linii se aflã câte patru numerenaturale mai mici decât 1.000.000.000,reprezentând coordonatele cartezie-ne ale colþului stânga-sus, respectivdreapta-jos ale fiecãrui dreptunghi.

În fiºierul inchis.out se vorafla douã numere naturale: numãrulmaxim de dreptunghiuri de care poa-te fi înconjuratã o închisoare ºi nu-mãrul acestor "închisori" maxime.

FFiigguurraa 44:: AArrbboorree ddee iinntteerrvvaallee ppeennttrruu pprroobblleemmaa ##33

FFiigguurraa 55:: RReedduucceerreeaa ccoommpplleexxiittăăţţiiii ppeennttrruu pprroobblleemmaa ##33