Отсортируем все отрезки из занятий, чтобы определить какие занятия придется проводить на полянке. Так как отрезки не пересекаются, а лишь касаются, сделать это можно по любой границе. Сложим в стек индексы очных занятий, чтобы определить какие онлайн занятия придется провести на полянке. Вытаскивая элемент из стека, рассмотрим его соседей в массиве, если они еще не лежали в стеке, но при этом невозможно успеть дойти до дома за перерыв, пометим их очными. Теперь, зная какие занятия очные, а какие нет, пройдем одним указателем. Для подсчета ответа удобно рассматривать концы занятия.
Если кончается онлайн занятие, а следующее очное, то к ответу добавии разность между началом второго занятия и концом первого минус $$$t$$$ — время перехода. Если кончается онлайн занятие, и следующее онлайн, то к ответу добавится разность между концом второго занятия и концом первого. (он все время сидит дома) Если кончается очное занятие, а следующее онлайн, то к ответу добавится разность между началом второго занятия и концом первого минус $$$t$$$ — время перехода. Если кончается очное занятие, и следующее очное, то Сид может попробовать сбегать до дома и назад, то есть, к ответу добавится разность между началом второго занятия и концом первого минус $$$2\cdot t$$$ — время перехода (если получившееся время положительно). Если это время отрицательное, то не будем его прибавлять.
Стоит не забыть также, что изначально он находится дома, а также после всех пар, возможно, успеет там отдохнуть. Поэтому можно в массив пар добавить нулевую пару и пару конца дня.