EduBrick

Палиндром ли подстрока

4000 мс · 512 МБ · всё или ничего

Дана строка. Запросы: заменить символ в позиции pp; проверить, является ли подстрока [l,r][l, r] палиндромом.

Подстрока — палиндром тогда и только тогда, когда она совпадает со своим разворотом. Значит нужны два дерева хешей: одно по строке, другое по перевёрнутой.

Хеш подстроки [l,r][l, r] прямой строки сравнивается с хешем подстроки [n−r+1,n−l+1][n - r + 1, n - l + 1] перевёрнутой. Если они равны — палиндром.

Точечное изменение символа затрагивает обе структуры: позицию pp в прямом дереве и позицию n−p+1n - p + 1 в обратном. Забыть про второе — самая частая ошибка.

Формат ввода

В первой строке nn и qq (1≤n,q≤1051 \le n, q \le 10^5). Во второй — строка из строчных латинских букв. Далее qq строк: 1 p c — заменить символ, или 2 l r — проверить подстроку на палиндромность.

Формат вывода

Для каждого запроса второго типа выведите YES или NO на отдельной строке.

Примеры

ввод
5 3
abcba
2 1 5
1 3 z
2 1 5
вывод
YES
YES
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.