Cerinţa
Se dau două şiruri a
şi b
, cu n
, respectiv m
elemente, numere naturale, ordonate crescător. Să se construiască un al treilea şir, c
, care să conţină, în ordine crescătoare, elementele din şirurile a
şi b
.
Date de intrare
Fişierul de intrare interclasare.in
conţine pe prima linie numărul n
; urmează n
numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii. Linia următoare conţine numărul m
şi urmează m
numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii.
Date de ieşire
Fişierul de ieşire interclasare.out
va conţine elementele şirului construit, câte 10
valori pe o linie, elementele de pe o linie fiind separate printr-un spaţiu. Ultima linie a fişierului poate să conţină mai puţin de 10
valori.
Restricţii şi precizări
1 ≤ n, m ≤ 100.000
- valorile elementelor celor două şiruri vor fi mai mici decât
1.000.000
Exemplu
interclasare.in
7 1 3 4 6 7 8 8 8 2 4 5 6 8 9 9 12
interclasare.out
1 2 3 4 4 5 6 6 7 8 8 8 9 9 12
#include <bits/stdc++.h> using namespace std; ifstream cin("interclasare.in"); ofstream cout("interclasare.out"); int main() { int n, m, k = 0; int a[100001], b[100001], c[200001]; cin >> n; for(int i = 1; i <= n; ++i) cin >> a[i]; cin >> m; for(int i = 1; i <= m; ++i) cin >> b[i]; int i = 1, j = 1; while(i <= n && j <= m) if(a[i] < b[j]) c[++k] = a[i], i++; else c[++k] = b[j], j++; while(i <= n) c[++k] = a[i], i++; while(j <= m) c[++k] = b[j], j++; for(int i = 1; i <= k; ++i){ cout << c[i] << " "; if(i % 10 == 0) cout << endl; } return 0; }