Олимпиадный тренинг

Задача . B2. Кошачья вечеринка (усложнённая версия)


Эта задача такая же как и предыдущая, но с большими ограничениями.

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

В каждый из \(n\) дней, начиная с дня, в который Широ переехала в новый дом, к ней будет в гости ровно одна кошка. Кошка приходящая в \(i\)-й день носит ленточку цвета \(u_i\). Широ хочет узнать наибольшее число \(x\), такое что если рассмотреть префикс из первых \(x\) дней, то можно убрать ровно один день из них, что каждый цвет ленточек, который встречался среди оставшихся \(x - 1\) дней встречается одинаковое число раз.

Например, рассмотрим следующую последовательность \(u_i\): \([2, 2, 1, 1, 5, 4, 4, 5]\). Тогда \(x = 7\) образует подходящий префикс, так как если удалить самый левый день с \(u_i = 5\), то получится что среди оставшихся \(x - 1\) дней каждый цвет встречается два раза. Обратите внимание, что \(x = 8\) не образует подходящий префикс, так как нужно убрать ровно один день.

Так как Широ всего лишь кошка, она не очень хороша в подсчётах и ей нужна ваша помощь с вычислением наибольшего подходящего префикса.

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество дней.

Вторая строка содержит \(n\) целых чисел \(u_1, u_2, \ldots, u_n\) (\(1 \leq u_i \leq 10^5\)) — цвета ленточек у кошек-гостей.

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

Выведите одно целое число \(x\) — максимальное количество дней в подходящем префиксе.

Примечание

В первом примере можно рассмотреть префикс из \(13\) дней, так как если убрать последний день из этого префиса, то все оставшиеся цвета \(1\), \(2\), \(3\), и \(4\) будут встречаться одинаковое число раз (\(3\) раза). Обратите внимание, что подходит также префикс из \(10\) дней (нужно удалить \(10\)-й день), однако требуется найти наибольший подходящий префикс.

В четвёртом примере, если рассмотреть префикс из первых \(6\) дней, то можно убрать третий день, тогда останутся цвета \(1\), \(2\), \(3\), \(4\) и \(5\), встречающиеся по одному разу.


Примеры
Входные данныеВыходные данные
1 13
1 1 1 2 2 2 3 3 3 4 4 4 5
13
2 5
10 100 20 200 1
5
3 1
100000
1
4 7
3 2 1 1 4 5 1
6
5 6
1 1 1 2 2 2
5

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя