Как стать автором
Обновить

Комментарии 2

По-моему, у вас алгоритм сломается, если два правила пересекаются, или два исключения. Алгоритм не знает, сколько исключений активно в данный момент, поэтому выключит флаг, когда встретит конец первого исключения, несмотря на то, что второе ещё в силе.
Такое может легко случиться на практике, например, если у врача больничный пересекается с выходными, или государственные праздники.

TL;DR
Что-то вы наворотили.


Если сложить границы всех интервалов в упорядоченный контейнер (массив или дерево), то в четных позициях будут начала интервалов, а в нечетных концы.
Затем достаточно искать begin/end вычитаемых или включаемых интервалов и реализовать логику включения/исключения с удалением из контейнера "закрашиваемых" границ.
Либо просто задействовать boost::icl::interval_set ;)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории