Палиндром ли подстрока
4000 мс · 512 МБ · всё или ничего
Дана строка. Запросы: заменить символ в позиции ; проверить, является ли подстрока палиндромом.
Подстрока — палиндром тогда и только тогда, когда она совпадает со своим разворотом. Значит нужны два дерева хешей: одно по строке, другое по перевёрнутой.
Хеш подстроки прямой строки сравнивается с хешем подстроки перевёрнутой. Если они равны — палиндром.
Точечное изменение символа затрагивает обе структуры: позицию в прямом дереве и позицию в обратном. Забыть про второе — самая частая ошибка.
Формат ввода
В первой строке и (). Во второй — строка из строчных латинских букв. Далее строк: 1 p c — заменить символ, или 2 l r — проверить подстроку на палиндромность.
Формат вывода
Для каждого запроса второго типа выведите YES или NO на отдельной строке.
Примеры
ввод
5 3 abcba 2 1 5 1 3 z 2 1 5
вывод
YES YES
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.