Блог пользователя Gerald

Автор Gerald, 14 лет назад, По-русски
На одной из прошлых тренировок ИТМО я наткнулся на одну интересную задачу. В ней давалась строка и делались следующие запросы, перевернуть отрезок с L по R, найти LCP двух суффиксов i, j, длина строки 106, да и запросов тоже 105. На контесте тогда я не успел добраться до нее, заступорился на более простых задачах, а в дорешивании не смог придумать как решать. Подозрительное слово переворот так и напрашивает декартово дерево из хешей, но как его поддерживать не очень понятно =)


В общем, Хотелось бы узнать как решается эта замечательная задача =). Жду комментариев!=)
  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится
Насколько я помню эта задача была на командной в ЛКШ. И если это так, то декартово дерево хешей - авторское решение.

А поддерживается оно несложно. Храним 2 хеша на поддереве - прямой и перевернутый. Тогда Для разворота просто меняем хеши местами. А для пересчета хешей через поддеревья, поддерживаем количество вершин в поддереве, которое и так нужно.


  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    О спасибо=) а я думал как же пересчитывать хеш=) крутой способ=) 
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    слушай а LCP можно в такой структуре искать без бинпоиска как думаешь?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Сам лично не писал. И не очень думал в общем-то... Насколько я помню Андреев писал с бинпоиском... Казалось бы бы если без него то надо отрезки как-то одновременно выделять... а они пересекаться могут.... Так что я думаю скорее всего нельзя.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Да я точно так же думал про пересечение. Только ограничения хлипкие какие то для nlog^2 =(