Enunt
Într-un laborator de analize chimice se utilizează N
reactivi. Se ştie că, pentru a evita accidentele sau deprecierea reactivilor, aceştia trebuie să fie stocaţi în condiţii de mediu speciale. Mai exact, pentru fiecare reactiv x
, se precizează intervalul de temperatură [minx, maxx]
în care trebuie să se încadreze temperatura de stocare a acestuia.
Reactivii vor fi plasaţi în frigidere. Orice frigider are un dispozitiv cu ajutorul căruia putem stabili temperatura (constantă) care va fi in interiorul acelui frigider (exprimată într-un număr întreg de grade Celsius).
Cerința
Scrieţi un program care să determine numărul minim de frigidere necesare pentru stocarea reactivilor chimici.
Date de intrare
Fişierul de intrare reactivi.in
conţine:
- pe prima linie numărul natural
N
, care reprezintă numărul de reactivi; - pe fiecare dintre următoarele
N
linii se aflămin max
(două numere întregi separate printr-un spaţiu); numerele de pe liniax+1
reprezintă temperatura minimă, respectiv temperatura maximă de stocare a reactivuluix
.
Date de ieșire
Fişierul de ieşire reactivi.out
va conţine o singură linie pe care este scris numărul minim de frigidere necesar.
Restricții și precizări
1 <= N <= 8000
-100 <= minx <= maxx <= 100
(numere întregi, reprezentând grade Celsius), pentru oricex
de la1
laN
- un frigider poate conţine un număr nelimitat de reactivi
#include <bits/stdc++.h> using namespace std; ifstream in("reactivi.in"); ofstream out("reactivi.out"); struct reactive { int mini, maxi; } v[8005]; int n; bool cmp(reactive a, reactive b) { if(a.maxi == b.maxi) { return a.mini < b.mini; } return a.maxi < b.maxi; } void solve() { sort(v + 1, v + 1 + n, cmp); int fridge = 1, ind = 1; for(int i = 2; i <= n; i++) { if(v[ind].maxi < v[i].mini) { fridge++; ind = i; } } out << fridge; } int main() { in >> n; for(int i = 1; i <= n; i++) { in >> v[i].mini >> v[i].maxi; } solve(); return 0; }