Znajdowanie indeksu największego elementu w drzewie licznikowym

Znajdowanie indeksu największego elementu w drzewie licznikowym
PO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Witam, niedawno nauczyłem się algorytmu znajdowania max w przedziale [a, b]. Wykorzystuję do tego drzewo przedziałowe, gdyż jest to najbardziej optymalny sposób obliczania max w sytuacji, w której wartości liści drzewa mogą być podmieniane. Niestety nie widzę optymalnego sposobu na znalezienie (w jakimś rozsądnym czasie) indeksu największego elementu. Mógłby ktoś pomóc z algorytmem? Dzięki z góry! :D

Tutaj zamieszczam mój algorytm na znalezienie max w przedziale [a, b]:

Kopiuj
int maxNaPrz(int a, int b) {
    int l = q + a, p = q + b, maxPr = 0;
    //q jest pomocniczą zmienną wynoszącą 2^19 - 1
    while (l <= p) {
        maxPr = max(maxPr, max(arr[l], arr[p]));
        l = (l + 1) >> 1; // inaczej: l = (l + 1) / 2;
        p = (p - 1) >> 1; // analogicznie dla p
    }
    return maxPr;
}
lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5025
1

Co to jest, arr?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Trochę nie rozumiem, jeśli tablica nie jest posortowana to musisz iterować po całości. A jeśli jest, to wystarczy wybrać wartość z jednego z jej końców.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.