# PBinfo #3975 – Intervale_AB – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Dându-se N intervale [a, b], calculați numărul maxim de astfel de intervale care se intersectează în cel puțin un punct.

Date de intrare
Fișierul de intrare intervale.in conține pe prima linie numărul N, iar pe următoarele N linii 2 numere naturale separate prin spații, reprezentând limitele intervalelor [a, b].

Date de ieșire
Fișierul de ieșire intervale.out va conține pe prima linie numărul mx, reprezentând numărul maxim de intervale care se intersectează în cel puțin un punct.

Restricții și precizări

1 ≤ N ≤ 100.000
-2.000.000.000 ≤ a ≤ b ≤ 2.000.000.000

Exemplu:
intervale.in

5
1 5
3 4
-10 10
-23 -20
100 200
intervale.out

3
Explicație
În fișierul de intrare numărul maxim* de intervale care se intersectează în cel puțin un punct este egal cu 3: [1, 5], [3, 4], [-10, 10].

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream fin("intervale.in");
ofstream fout("intervale.out");
struct atom
{
    int x, t;
    bool operator < (const atom alt) const
    {
        if(x == alt.x)
            return t < alt.t;
        return x < alt.x;
    }
};
int k, n, a,b;
atom v[200005];
int main()
{
    int i, cnt, ans;
    fin >> n;
    for(i = 1; i <= n; i++)
    {
        fin >> a >> b;
        v[++k] = {a, 0};
        v[++k] = {b, 1};
    }
    sort(v + 1, v + k + 1);
    cnt = ans = 0;
    for(i = 1; i <= k; i++)
    {
        if(v[i].t == 0) cnt++;
        else cnt--;
        ans = max(ans, cnt);
    }
    fout << ans << "\n";
    fout.close();
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3975)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3975/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3975/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
