eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Преобразование строковых функций

Преобразование строковых функций

Для строки \textbf{S} определим \textbf{Z}-функцию следующим образом: \textbf{Z\[i\] = lcp(S, S\[i..|S|\])}, где \textbf{lcp(S_1, S_2)} равно длине наибольшего общего префикса строк \textbf{S_1} и \textbf{S_2}. Например, для \textbf{S = abacabaa} \textbf{Z}-функция равна \textbf{\[8, 0, 1, 0, 3, 0, 1, 1\]}. Для строки \textbf{S} определим ее префикс-функцию: \textbf{pi\[i\] = max\{k | 0 }≤\textbf{ k }<\textbf{ i, S\[1..k\] = S\[i - k + 1..i\]\}}. Например, для \textbf{S = abacabaa} ее префикс-функция имеет вид: \textbf{\[0, 0, 1, 0, 1, 2, 3, 1\]}. Для некоторой строки \textbf{S} была посчитана ее \textbf{Z}-функция, а строка \textbf{S} была утеряна. Ваша задача получить ее префикс-функцию по заданной \textbf{Z}-функции. \InputFile В первой строке входного файла содержится натуральное число \textbf{N} (\textbf{1} ≤ \textbf{N} ≤ \textbf{200000}), где \textbf{N} - длина \textbf{S}. Во второй строке записана \textbf{Z}-функция строки \textbf{S}. \OutputFile Выведите \textbf{N} чисел - искомую префикс-функцию.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
8
8 0 1 0 3 0 1 1
Выходные данные #1
0 0 1 0 1 2 3 1