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

Автор ironsoul, история, 8 лет назад, По-русски

Всем здравствуйте, можете подсказать как помимо получения максимального элемента на отрезке получить его индекс в исходном массиве. Реализую дерево сверху:

void build(int v, int tl, int tr) { if (tl == tr) t[v] = a[tl]; else { int tm = tl + tr >> 1; build(v + v, tl, tm); build(v + v + 1, tm + 1, tr); t[v] = max(t[v+v], t[v + v + 1]); } }

Что стоит изменить, для получения индекса максимума?

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

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

Как вариант, хранить в массиве t не сам максимум, а индекс максимума.

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

Я обычно сохраняю пару (максимум; индекс).
То есть просто в своем коде заменяешь t[v] = a[tl]; на t[v] = make_pair(a[tl], tl);