Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2009-03-01 17:12:28.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:interclas.in, interclas.outSursăad-hoc
AutorAutor necunoscutAdăugată desima_cotizoSima Cotizo sima_cotizo
Timp execuţie pe test0.5 secLimită de memorie20480 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Interclasare

Se dau doua siruri de numere intregi ordonate crescator, A si B de lungime N, respectiv M. Se cere afisarea unui sir de numere ordonate crescator, care contine elemente atat din sirul A, cat si din B.

Date de intrare

Fişierul de intrare interclas.in va contine pe prima linie N si M, numarul de elemente din cele doua siruri. Pe urmatoarele doua linii se vor afla elementele sirurilor, separate prin spatii.

Date de ieşire

În fişierul de ieşire interclas.out va contine, pe o singura linie, elementele sirului cerut.

Restricţii si precizari

  • 1 ≤ N, M ≤ 900 000
  • N+M ≤ 1 000 000
  • Elementele din sirurile A si B sunt pozitive si nu vor depasi 20 000 000.
  • Elementele din sirurile A si B se pot repeta.

Exemplu

interclas.ininterclas.out
4 5
1 3 5 9
2 4 6 10 12
1 2 3 4 5 6 9 10 12

Indicatii de rezolvare

O prima solutie ar presupune citirea datelor intr-un acelasi sir si apoi sortarea acestuia. Complexitatea O((N+M)log(N+M)) nu este insa optima.

Abordarea problemei presupune interclasarea celor doua siruri, operatie ce are complexitatea O(N+M). Vom parcurge sirurile A si B simultan, cu doi iteratori - i si j. La fiecare pas vom introduce in sirul C (cerut de problema) elementul minim dintre A[i] si B[j], avand grija ca iteratorii sa nu fi trecut de numarul de elemente din sir.

Pentru exemplul problemei, primii pasi ai algoritmului pot fi urmatorii:

Pas 1Pas 2Pas 3

Introduc pe A[i], deci C = (1)

Introduc pe B[j], deci C = (1,2)

Introduc pe A[i], deci C = (1,2,3)

Trebuie avuta in vedere necesitatea memoriei suplimentare la implementare. O prima varianta ar fi declararea sirul C separat, cu N+M elemente si "umplerea" acestuia pe parcurs ( cu sursa aici ). Se poate folosi insa numai max(N,M) memorie suplimentara, considerand ca sirul A are N+M elemente ( o implementare aici ) sau min(N,M) memorie daca se va avea in vedere marirea capacitatii sirului cu mai multe elemente ( cu implementarea aici )

O sursa de 100 de puncte care nu foloseste memorie suplimentara se gaseste aici . De asemenea, o implementare mai scurta a algoritmului se poate gasi aici .

Interclasarea este folosita

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?