@artur_agishev

Алгоритм для нахождения количества пересечений отрезков в последовательности(списке)?

Можете написать минимальный по сложности(время) алгоритм для нахождения количества пересечений отрезков в последовательности(списке)

Пример
Отрезки
0 3
1 1
2 4
Последовательность
1 2 3 4 5
Вывод
1 2 2 2 1
То есть пересечение происходит по всей длине отрезка
6129177bf2c8c878265652.png
  • Вопрос задан
  • 769 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Заведите массив из нулей. Для каждого отрезка сделайте +1 в координату его левого конца и -1 в координату, следующую за правым концом.

Потом пройдитесь по массиву слева-направо, поддерживая счетчик. Прибавляйте к счетчику значение массива и выводите значение счетчика.

Это если вам надо весь массив, как в примере, выводить. Не знаю специфику вашей задачи, может эффективнее будет класть в массив пары {координата, +-1} и сортировать. Потом точно также обойти слева направо поддерживая счетчик.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
Если я правильно понимаю типы данных, то перебор списка с обычной проверкой counter+= left<=x<=right будет наиболее быстрым с учетом скорости выделения и освобождения памяти.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы