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

Задача . E2. Астеризм (сложная версия)


Это сложная версия задачи. Различие между версиями заключается в ограничениях на \(n\) и \(a_i\). Вы можете делать взломы, только если обе версии этой задачи сданы.

Сначала Aoi придумал следующую идею для задачи по программированию:

Yuzu девочка, которая коллекционирует конфеты. Изначально, у нее есть \(x\) конфет. Также есть \(n\) врагов, пронумерованных целыми числами от \(1\) до \(n\). Враг \(i\) имеет \(a_i\) конфет.

Yuzu хочет получить перестановку \(P\). Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в некотором порядке. Например, \(\{2,3,1,5,4\}\) это перестановка, а \(\{1,2,2\}\) это не перестановка (число \(2\) встречается в массиве дважды) и \(\{1,3,4\}\) тоже не является перестановкой (потому что \(n=3\), но в массиве есть число \(4\)).

После этого, она проведет \(n\) дуэлей с врагами по следующим правилам:

  • Если Yuzu сейчас имеет не меньше конфет, чем враг \(P_i\), она побеждает в дуэли и получает \(1\) конфету. Иначе, она проигрывает дуэль и ничего не получает.
  • Конфета, которую получает Yuzu в случае победы, будет использоваться в следующих дуэлях.

Yuzu хочет победить во всех дуэлях. Сколько существует возможных перестановок \(P\), для которых это произойдет?

Эта задача была простой и неинтересной для Akari, друга Aoi. И Akari придумал следующую задачу, на основе описанной идеи:

Давайте определим \(f(x)\) как количество возможных перестановок для целого числа \(x\).

Вам дано число \(n\), массив \(a\) и простое число \(p \le n\). Назовем целое положительное число \(x\) хорошим, если значение \(f(x)\) не делится на \(p\). Найдите все хорошие числа \(x\).

Решите задачу, предложенную Akari.

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

В первой строке находится два целых числа \(n\), \(p\) \((2 \le p \le n \le 10^5)\). Гарантируется, что число \(p\) является простым (оно имеет ровно два делителя \(1\) и \(p\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 10^9)\).

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

В первой строке выведите количество хороших чисел \(x\).

Во второй строке выведите все хорошие числа \(x\) в возрастающем порядке.

Гарантируется, что количество хороших чисел \(x\) не превосходит \(10^5\).

Примечание

В первом тесте \(p=2\).

  • Если \(x \le 2\) тогда нет ни одной перестановки, подходящей для Yuzu. Поэтому \(f(x)=0\) для \(x \le 2\). Заметим, что \(0\) делится на \(2\), поэтому ни одно число \(x \leq 2\) не хорошее.
  • Если \(x = 3\), то \(\{1,2,3\}\) единственная подходящая для Yuzu перестановка. Тогда, \(f(3)=1\), а значит число \(3\) хорошее.
  • Если \(x = 4\), то \(\{1,2,3\} , \{1,3,2\} , \{2,1,3\} , \{2,3,1\}\) это все перестановки, подходящие для Yuzu. Тогда, \(f(4)=4\), значит число \(4\) не хорошее.
  • Если \(x \ge 5\) , все \(6\) перестановок подходят Yuzu. Тогда, \(f(x)=6\) для всех \(x \ge 5\). Значит ни одно число \(x \ge 5\) не хорошее.

Значит единственное хорошее число это \(3\).

В третьем тесте для всех целых положительных \(x\) значение \(f(x)\) делится на \(p = 3\).


Примеры
Входные данныеВыходные данные
1 3 2
3 4 5
1
3
2 4 3
2 3 5 6
2
3 4
3 4 3
9 1 1 1
0
4 3 2
1000000000 1 999999999
1
999999998

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

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