Задать вопрос
@artur_agishev

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

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

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

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

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

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

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