# Сканирующая прямая
Основная идея алгоритмы заключается в сортировке событий. Например, **начало отрезка**, **конец отрезка**, **точка**, **человек зашёл в лифт** и.т.д.
# Точка поркытая наибольшим количеством отрезков
Код:
```cpp=
int main() {
int n;
cin >> n;
vector<pair<int, int>> v;
for (int i = 0; i < n; i++) {
int l, r;
cin >> l >> r;
v.push_back({l, 0});// добавляем событие - начало отрезка
v.push_back({r, 1});// добавляем событие - конец отрезка
}
sort(v.begin(), v.end()); // сортируем события
int ans = 0;
int ma = -1;
int now = 0;
for (auto[x, t] : v) {
if (t == 0) {
now++;
} else {
now--;
}
if (ma < now) {
ma = now;
ans = x;
}
}
cout << ans;
}
```
Время работы $n\log{n}$