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

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

Такое возможно? Будет N2 вершин? А реверс подматрицы за logNlogM можно делать?

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Что вы понимаете под реверсом подматрицы?

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Переворот строк, а потом столбцов.

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      Берем массив из N декартовых деревьев по неявному ключу на М элементов. Допустим приходит запрос развернуть подматрицу по горизонтали — то есть по сути развернуть подстроку в каждой строке, которая попадает в запрос — тогда просто M раз запускаем разворот. Если надо развернуть по вертикали то меняем кусок дерева из первой строки запроса с куском дерева из последней строки запроса, кусок дерева из второй — с куском дерева из предпоследней и т.д. Оба запроса будут работать за O(NlogM). Сомневаюсь, что реально за LogN*logM.

      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        это влоб, мне кажется товарищу хочется чего-то экстравагантного.

        но честно говоря, за logNlogM врядли... еще меня мучает вопрос, зачем (НУ НАХРЕНА) это нужно

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится +16 Проголосовать: не нравится

          Всегда мечтал крутить матрицу за логарифм.

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится +20 Проголосовать: не нравится

            бойтесь, может выйти так, что придется довольствоваться второй частью названия вашего поста

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится +3 Проголосовать: не нравится

          Честно говоря, не поворачивается язык назвать массив декартовых деревьев по неявному ключу решением влоб =)

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится +3 Проголосовать: не нравится

            ну это первое что приходит в голову

»
13 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

Скорее всего, нельзя делать реверс подматрицы за log n log m. На Петрозаводских сборах была такая задача, и она решалась за O(N+M) на запрос, O(N log M) декартовыми деревьями не пролазило. За O(N+M) решается такой структурой: для каждой ячейки будем хранить 2 неупорядоченные пары ссылок на ее соседей: для ссылки мы будем знать, в соседа по какой оси она ведет, но не будем знать, в положительном или отрицательном направлении. Вокруг матрицы будем иметь рамку фиктивных ячеек. Начиная от них, мы можем пройти и восстановить целую строку или столбец. Чтобы реверснуть подматрицу, нужно перекинуть ссылки только вдоль периметра подматрицы (тем не менее, до этого периметра сначала надо дойти от границы).

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +96 Проголосовать: не нравится

    На Петрозаводских сборах разве что дьявола не вызывают.

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится +27 Проголосовать: не нравится

      Ну-ну. Бывает, смотришь на свой код и тебе кажется странным, что дьявол еще не здесь.

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

Наврал