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

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

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

И вот столкнулся с такой задачей,как прибавление какого то числа на отрезке.

Не мог ли бы кто то из вас,помочь мне с этой задачей?

Проблема в том что я не знаю,как именно это реализовать за нормальную асимптотику.

Не думаю что здесь так же будет обещание как и в дереве отрезков

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

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

Ко нибудь может объяснить почему этот код

https://ideone.com/zf1KRe

работает,для задачи прибавить на отрезке и узнать значение элемента. Почему когда узнаем нужно

get(x) ,а не get(x) - get(x-1) ?

Объясните пожалуйста как он ведет себя для этой задачи?

Полный текст задачи: Задача D

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

    Вместо того, чтобы поддерживать массив a, будем поддерживать массив b, такой, что b[i] = a[i]-a[i-1] (считаем, что a[-1] = 0), тогда a[i] = b[0]+b[1]+...+b[i], а операция прибавления на отрезке [l, r] меняет только b[l] и b[r+1].

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

    При прибавлений на отрезке мы делаем t[l] += x, t[r + 1] -= x. Теперь, что бы найти t[x], нам надо найти сумму от 1 до t[x]. Ненужные отрезки сами будут исключаться.