Wskazówka:
Zauważmy, że funkcja F(p, k, e) znajduje pierwszą pozycję w posortowanej tablicy T[p..k],
na której wartość jest większa od danej liczby e. Wynikiem wywołania F(1, n, b) będzie
pierwsza pozycja w tablicy T, dla której wartość jest większa od liczby b. Zatem będzie to
liczba elementów tablicy mniejszych bądź równych b. Analogicznie wywołanie funkcji
F(1, n, a) zwróci najmniejszy indeks i w tablicy T, taki że T[i] > a. Zatem wartość różnicy
F(1, n, b) – F(1, n, a) jest równa liczbie elementów tablicy, które należą do przedziału [a+1,
b]. Trzeba więc jeszcze osobno zliczyć elementy, które są równe a, co prowadzi do złożoności liniowej algorytmu:
prawy ← F(1, n, b)
lewy ← F(1, n, a)
i ← lewy – 1
dopóki (i > 0 oraz T[i] = T[lewy])
i ← i – 1
lewy ← i+1
w ← prawy – lewy
Zauważmy jednak, że osobne obliczanie elementów równych a jest zbędne. Wywołanie funkcji F(1, n, a – 1) zwraca najmniejszy indeks i, taki że T[i] > a – 1. Prowadzi to do rozwiązania
o złożoności logarytmicznej:
prawy ← F(1, n, b)
lewy ← F(1, n, a – 1)
w ← prawy – lewy