Всем здравствуйте, можете подсказать как помимо получения максимального элемента на отрезке получить его индекс в исходном массиве. Реализую дерево сверху:
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]); } }
Что стоит изменить, для получения индекса максимума?
Как вариант, хранить в массиве t не сам максимум, а индекс максимума.
Я обычно сохраняю пару (максимум; индекс).
То есть просто в своем коде заменяешь
t[v] = a[tl];
наt[v] = make_pair(a[tl], tl);
https://youtu.be/dH3vcXHsV-o?t=268