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

Автор Hohol, 15 лет назад, По-русски

Прочитал отличный цикл статей  от Skiminok о дерамиде.

Хотелось бы применить полученные знания на практике.
Сам могу указать две задачи с тимуса: War Games 2 и Battle with You-Know-Who. Но в них используются лишь относительно простые операции, хотелось бы чего-нибудь повеселее.
  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Как решать первую?
    • 15 лет назад, скрыть # ^ |
      Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится

      В Кормене есть разбор. В кратце так:

      Сортируем все точки концов и начал отрезков по x. Потом сканлайном по этим точкам строится множество отрезков, сравнение - у кого точка пересечения со сканлайном ниже. Если точка открывает наш отрезок - то смотрятся непосредственно следующий и предыдущий отрезки в множестве, если наш пересекается с одним из них, то ответ найден. Ну и добавить отрезок надо. Если точка закрывает наш отрезок, то проверяется пересечение следующего и предыдущего во множестве, и отрезок удаляется. Собственно тут всплывает много операций: add, delete, prev, next, так что подходит сбаллансированое деревое, например treap.

      • 15 лет назад, скрыть # ^ |
        Rev. 3  
        Проголосовать: нравится 0 Проголосовать: не нравится

        Спасибо, не догадался в Кормена заглянуть.

        И из-за кодефорсеса забыл о существовании дискасса на тимусе. Там все уже давно рассказали.
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Возможно, Вам понравится эта задача, в ней любопытная задумка. Вообще, можно все прорешать из раздела.
  • 15 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Очень приятная задача. Из раздела единственная, над которой пришлось думать.

    Решил сначала SQRT-декомпозицией - так мне почему-то проще рассуждать было, затем переписал на дерамиду. С дерамидой получилось намного короче и красивее. Прямо проникся мощью дерамиды по неявному ключу.

    • 15 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Поделись, пожалуйста,  идеей с SQRT-декомпозицией. В общем, я  представляю, что нужно будет хранить сумму в блоке на чётных/нечётных позициях, но сталкиваюсь определёнными проблемами при пересчёте.
      • 15 лет назад, скрыть # ^ |
        Rev. 2  
        Проголосовать: нравится 0 Проголосовать: не нравится

        Насколько я понял, ты еще не дошел до верной идеи решения. Лучше подумай еще немного, она классная, и не слишком сложная.
        "нужно будет хранить сумму в блоке на чётных/нечётных позициях" - не совсем верно.
        В любом случае, ответ в первой правке.
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится +3 Проголосовать: не нравится
15 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Вот эта задача красиво решается дерамидой.
http://acm.timus.ru/problem.aspx?space=1&num=1521
15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится
Я извиняюсь. Upit - действительно хорошая задача, чтобы понять как без багов писать групповые операции на дерамиде. Я очень долго тупил с ее написанием и все-таки сдал(на своем ноутбуке, на своем ejudge). 

15 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

http://acm.timus.ru/problem.aspx?space=1&num=1839
как решить задачу с помощью дерамиды? Ничего лучше как пересечение двух дермид не знаю ...
»
14 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

Если у кого есть построение на Паскале дерамиды по явному ключу можно попросить код посмотреть. Сам написал, но не во всех случаях верно строит. Хочу попробовать понять правильное решение.