¿Cuál será el algoritmo para este problema de entrevista de pasantía Directi?

Vamos a demostrar esto con un ejemplo:
alturas [] = {2, 7, 3, 8, 5}
Ordenar el conjunto de alturas en orden descendente.
alturas [] = [8, 7, 5, 3, 2]
Mantenga otra matriz que almacene la suma de esta y todos los elementos anteriores (DP)
dp [] = [8, 15, 20, 23, 25]

Ahora aplique la búsqueda binaria en un rango de línea real (0, max_height). No necesita almacenar esta matriz solo una búsqueda binaria que se encuentra en el medio simplemente agregando elementos de límite / 2.
Esto le dará un pivote donde buscará si puede cortar en este punto, digamos pivote

Ahora aplique nuevamente la búsqueda binaria en la matriz de alturas [] para cada pivote y encuentre una posición tal que todos los elementos posteriores sean menores o iguales que el pivote.
Digamos que tiene una posición y en la matriz, ahora
dp [y] – pivote * (y + 1) Esta es la cantidad de madera que tiene cortando en el punto de pivote. Ahora, si es mayor que x, entonces su nueva región para búsqueda binaria es (pivote, 8) de lo contrario vaya a (0, pivote – 1).

¡¡Espero que esto ayude!! ¡Solo una memoria con dos búsquedas binarias!
Complejidad: (n log n + log (max_height) * log (n))