Аналитика сессий пользователей

Просмотр в формате PDF

Submit solution


Очки: 170
Ограничение по времени: 2.0s
Ограничение по памяти: 256M

Автор:
Problem types
Allowed languages
C++, Python

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

В логе записаны события двух типов: открытие сессии LOGIN и завершение сессии LOGOUT. Каждое событие содержит момент времени ts — количество секунд от начала суток, а также идентификатор пользователя uid.

Сессия пользователя начинается в момент LOGIN и заканчивается ближайшим следующим событием LOGOUT этого же пользователя. Гарантируется, что корректные сессии одного и того же пользователя не должны пересекаться по смыслу, однако в логе возможны нештатные записи, которые нужно обрабатывать по правилам ниже.

Правила обработки событий:

  • если встретилось событие LOGOUT, а у этого пользователя нет открытой сессии, такое событие игнорируется;
  • если встретилось событие LOGIN, а у этого пользователя уже есть открытая сессия, такое событие игнорируется, текущая сессия продолжается;
  • если после обработки всего лога у пользователя осталась открытая сессия, считается, что она продолжается до момента 86400.

События в логе заданы в неубывающем порядке времени. Если у нескольких событий одинаковый ts, их нужно обрабатывать в том порядке, в котором они записаны во входных данных.

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

Входные данные

Первая строка содержит целое число n — количество событий в логе.

Каждая из следующих n строк содержит описание одного события в формате ts type uid, где:

  • ts — момент времени в секундах от начала суток;
  • type — строка LOGIN или LOGOUT;
  • uid — идентификатор пользователя.

Выходные данные

Выведите информацию обо всех пользователях, у которых была хотя бы одна корректно начатая сессия.

Для каждого такого пользователя в отдельной строке выведите два числа: uid total, где total — суммарное время всех его сессий в секундах.

Пользователей нужно выводить в порядке возрастания uid.

Ограничения

  • 1 <= n <= 2 * 10^5
  • 0 <= ts <= 86399
  • 1 <= uid <= 10^9

Примеры

Пример 1

Входные данные

8
10 LOGIN 1
20 LOGOUT 1
20 LOGIN 2
20 LOGOUT 2
30 LOGOUT 3
40 LOGIN 3
50 LOGIN 3
60 LOGOUT 3

Выходные данные

1 10
2 0
3 20
Пример 2

Входные данные

10
0 LOGIN 5
0 LOGIN 5
1 LOGOUT 5
1 LOGOUT 5
2 LOGIN 7
2 LOGIN 8
2 LOGOUT 7
2 LOGOUT 8
86399 LOGIN 9
86399 LOGIN 9

Выходные данные

5 1
7 0
8 0
9 1

Комментарии

Еще нет ни одного комментария.