Изменения

Перейти к: навигация, поиск

Дерево палиндромов

27 байт убрано, 21:35, 7 июня 2016
Число вхождений каждого подпалиндрома в строку
Чтобы решить эту задачу деревом палиндромов, нужно обратить внимание на то, что при добавлении нового символа увеличивается количество вхождений наибольшего палиндрома-суффикса <tex>t</tex>, содержащего новый символ, и всех палиндромов, достижимых из <tex>t</tex> по суффиксным ссылкам.
Для каждой вершины <tex>u</tex> дерева палиндромов будем хранить число вхождений строки <tex>u.num'</tex> {{---}} количество вхождений соответствующего вершине палиндрома в исходную строку (не обязательно актуальные данные) и число <tex>u.toAdd</tex>, которое необходимо добавить к <tex>v.num</tex> числу вхождений всех потомков <tex>v</tex> вершины <tex>u</tex>. Назовем такую операцию добавления ''операцией релаксации''. После того, как релаксация будет выполнена для всех предков вершины <tex>u</tex>, можно будет считать, что <tex>u.num</tex> содержит актуальные данныепосчитанное число вхождений соответствует действительности.  
Данный метод очень похож на метод, описанный в статье [[Несогласованные_поддеревья._Реализация_массового_обновления|про реализацию массовых обновлений в деревьях отрезков]].
165
правок

Навигация