да
структуры данных сейчас нет, возможно, стоит попробовать другие варианты, но эта мне пока кажется наиболее подходящей
Функция объединения интервалов.
1) Преобразовываете все X в [X,X].
2) Сортируете по все интервалы по возрастанию первого числа, начала.
3) Заводите выходной массив интервалов, пустой;
4) Заводите prev интервал, изначально null;
5) Идёте линейно по исходному отсортированному массиву:
5.1) Если prev равен null – копируете в него текущий, продолжаем цикл;
5.2) Иначе если начало текущего интервала больше, чем конец prev:
5.2.1) Кидайте prev в выходной массив, пересоздаёте prev;
5.2.2) Копируете в prev текущий интервал, продолжаем цикл;
5.3) Иначе если конец prev меньше, чем конец текущего – делаем его равным концу текущего (максимум).
5.4) Продолжаем цикл.
6) Если prev не пуст – добавляете его к выходному массиву.
7) Выводим результат!