Задача №114967. Тотальный mex
На уроке физкультуры \(n\) школьников выстроились в ряд. У каждого школьника есть номер: \(i\)-й школьник имеет номер \(a_i\) (номера могут совпадать). Вам дали задание — разбить всех школьников на группы. Чтобы не тратить время на перестановку людей, вы решили, что группу могут образовывать только школьники, стоящие подряд.
Красотой группы считается минимальное целое неотрицательное число \(x\), что в этой группе нет ни одного школьника с номером \(x\). Вы хотите разбить школьников на любое количество групп так, чтобы суммарная красота всех групп была как можно больше.
Более формально, дан массив целых чисел \(a\) длины \(n\).
Зададим последовательностью индексов \(0 = i_0 < i_1 < i_2 < \ldots < i_k = n\) разбиение массива на отрезки \([i_0, i_1 - 1]\), \([i_1, i_2 - 1]\), ..., \([i_{k - 1}, i_k - 1]\). Для данного разбиения \(\langle i_0, \ldots, i_k \rangle\) скажем, что его красота равна \(\)\sum\limits_{t=0}^{k - 1} \mathrm{mex}(a_{i_t}, a_{i_t + 1}, \ldots, a_{i_{t + 1} - 1})\text{,}\(\) где \(\mathrm{mex}\) обозначает «minimal excluded», то есть минимальное целое неотрицательное число, которое не встречается в наборе. Обратите внимание, что элементы массива в этой задаче нумеруются с нуля.
Например, для разбиения массива \([1, 0, 2, 5, 3, 4, 0]\) на отрезки \([1, 0, 2]\), \([5, 3, 4]\) и \([0]\), красота будет равна \(\mathrm{mex}(1, 0, 2) + \mathrm{mex}(5, 3, 4) + \mathrm{mex}(0) = 3 + 0 + 1 = 4\), а для разбиения на \([1, 0, 2, 5, 3, 4]\) и \([0]\) красота будет равна \(\mathrm{mex}(1, 0, 2, 5, 3, 4) + \mathrm{mex}(0) = 6 + 1 = 7\).
По данному массиву \(a\) найдите его самое красивое разбиение на отрезки, то есть разбиение, имеющее максимальное значение красоты .
Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 500\,000\)) — длина массива.
Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \ldots, a_{n - 1}\) (\(0 \le a_i \le 20\)) — элементы массива.
В первой строке выведите целое число \(k\) — количество отрезков в самом красивом разбиении массива на отрезки.
Во второй строке через пробел выведите числа \(i_0, \ldots, i_k\) — границы отрезков разбиения. Должно выполняться \(i_0 = 0\), \(i_k = n\) и \(i_t < i_{t + 1}\) для всех \(t\).
Если разбиений с максимальным значением красоты несколько, выведите любое из них.
Тесты к этой задаче состоят из 6 групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов некоторых из предыдущих групп. Обратите внимание, прохождение тестов из условия не требуется для некоторых групп.
Доп. ограничения | |||||
Группа | Баллы | \(n\) | \(a_i\) | Необх. группы | Комментарий |
0 | 0 | – | – | – | Тесты из условия. |
1 | 12 | \(n \le 15\) | – | 0 | |
2 | 14 | \(n \le 500\) | – | 0, 1 | |
3 | 18 | \(n \le 5000\) | – | 0, 1, 2 | |
4 | 16 | – | \(a_i \le 1\) | – | |
5 | 19 | – | \(a_i \le 5\) | 4 | |
6 | 21 | – | – | 0 – 5 |
7 1 0 2 5 3 4 0
2 0 6 7
5 1 2 0 1 2
3 0 3 4 5