а что если так:
берем пустое дерево отрезков
берем случайный отрезок из данных нам
делаем поиск в дереве отрезков на наличие отрезков перевекающихся с тем что мы взяли
если пересечений нет - добавляем новый отрезок в дерево. если пересечения есть - мержим отрезок и тот с которыми он пересекается
что-то около O(N*logN), работает на лету, не нужно сортировать входящие данные