David a învățat de curând la școală ce înseamnă o mulțime de numere naturale și ce operații se pot face pe mulțimi. Printre operațiile învățate, lui David i s-au părut interesante operația de reuniune a două mulțimi și operația de intersecție a două mulțimi, așa că el, fiind pasionat de informatică, s-a gândit să implementeze cele două operații pentru două mulțimi. Mulțimile sunt formate din numere consecutive. Prima mulțime este formată din N
numere naturale consecutive și începe cu P1
, respectiv a doua mulțime este formată din M
numere naturale și începe cu P2
.
Cerința
Cunoscând N
, P1
, M
și P2
se cere:
a) Să se afișeze reuniunea celor două mulțimi.
David a învățat de curând la școală ce înseamnă o mulțime de numere naturale și ce operații se pot face pe mulțimi. Printre operațiile învățate, lui David i s-au părut interesante operația de reuniune a două mulțimi și operația de intersecție a două mulțimi, așa că el, fiind pasionat de informatică, s-a gândit să implementeze cele două operații pentru două mulțimi. Mulțimile sunt formate din numere consecutive. Prima mulțime este formată din N
numere naturale consecutive și începe cu P1
, respectiv a doua mulțime este formată din M
numere naturale și începe cu P2
.
Cerința
Cunoscând N
, P1
, M
și P2
se cere:
a) Să se afișeze reuniunea celor două mulțimi.
b) Să se afișeze intersecția celor două mulțimi.
Date de intrare
Fişierul de intrare multimi2.in
conţine pe prima linie un număr natural p
. Pentru toate testele de intrare, numărul p
poate avea doar valoarea 1
sau valoarea 2
. Pe a doua linie se află patru numere naturale N
, P1
, M
și P2
cu semnificația din enunț.
Date de ieșire
Dacă valoarea lui p
este 1
, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire multimi2.out
se va scrie reuniunea celor două mulțimi.
Dacă valoarea lui p
este 2
, se va rezolva numai punctul b) din cerință. În acest caz, în fișierul de ieșire multimi2.out
se va scrie intersecția celor două mulțimi.
Restricții și precizări
1 ≤ N, M ≤ 500000
1 ≤ P1, P2 ≤ 750000
- Pentru rezolvarea corectă a primei cerinţe se acordă
50
de puncte, iar pentru cerința a doua se acordă50
de puncte. - Elementele mulțimii din fișierul de ieșire se vor afişa în ordine crescătoare.
- Dacă mulţimea rezultată este vidă se va afişa
-1
.
Exemplul 1:
multimi2.in
1 3 4 3 5
multimi2.out
4 5 6 7
Explicație
p = 1
Prima mulțime este {4,5,6}
, iar a doua {5,6,7}
.
Reuniunea celor două mulțimi reprezintă elementele care aparțin cel puțin unei mulțimi.
Atenție! Pentru acest test se rezolvă doar cerința a).
Exemplul 2:
multimi2.in
2 3 4 3 5
multimi2.out
5 6
Explicație
p = 2
Prima mulțime este {4,5,6}
, iar a doua {5,6,7}
.
Intersecția celor două mulțimi reprezintă elementele comune.
Atenție! Pentru acest test se rezolvă doar cerința b).
#include <bits/stdc++.h> using namespace std; ifstream cin("multimi2.in"); ofstream cout("multimi2.out"); int main() { int c , s1 , c1 , s2 , c2; cin >> c >> c1 >> s1 >> c2 >> s2; if(c==1) { if(s1 > s2) swap(s1 , s2) , swap(c1 , c2); if(s1 + c1 <= s2) { for(int i = s1 ; i < s1+c1 ; ++i) cout << i << ' '; for(int i = s2 ; i < s2+c2 ; ++i) cout << i << ' '; } else for(int i = s1 ; i < max(s1 + c1 , s2 + c2) ; ++i) cout << i << ' '; } else { if(s1 > s2) swap(s1 , s2) , swap(c1 , c2); if(s1+c1 <= s2) cout << -1; else for(int i = s2 ; i < min(s1+c1 , s2+c2) ; ++i) cout << i << ' '; } cin.close(); cout.close(); return 0; }