Если ваша функция унимодальная (сначала возрастающая, потом убывающая), то можно применить
троичный поиск.
Правда, там трубуется, чтобы функция сторго возрастала а потом строго убывала.
Если у вас функция горизонтальная на отрезках длины 1 (т.е. от целочисленных аргументов), то троичный поиск еще можно применить.
Но если функция может принимать одинаковые значения на произвольном промежутке, то никаких логарифмических алгоритмов поиска максимума тут нет. Если обе промежуточные точки выдадут одно и то же значение, то никак не определить, в каком из трех промежутков лежит максимум.