Я делаю онлайн-курс и застрял в этой проблеме.Точки и сегменты
Первая строка содержит два неотрицательных целых числа 1 ≤ n, m ≤ 50000 - количество сегментов и точек на линии соответственно. Следующие n строк содержат два целых числа a_i ≤ b_i, определяющие i-й сегмент. Следующая строка содержит m целых чисел, определяющих точки. Все целые числа имеют абсолютное значение не более 10^8. Для каждого сегмента выведите количество точек, которые оно использует из таблицы n
.
Мое решение:
for point in points:
occurrence = 0
for l, r in segments:
if l <= point <= r:
occurrence += 1
print(occurrence),
Сложность этого алгоритма O (м * п), что, очевидно, не очень эффективно. Каков наилучший способ решения этой проблемы? Любая помощь будет оценена!
Пример ввода:
2 3
0 5
7 10
1 6 11
Пример вывода:
1 0 0
Пример ввода 2:
1 3
-10 10
-100 100 0
Пример вывода 2:
0 0 1
Опишите проблему, опишитеся ниже. Что представляет собой проблема для проблемы и что должно быть результатом? – Farseer
@Farseer Я добавил образец IO – user1806258
Я написал простое решение с использованием 'бинарного поиска', решая его в O (n log m). Проверь это. – vish4071