La parte lógica es la siguiente:
En primer lugar, debe averiguar qué método utilizar para responder a las consultas de manera eficiente. La solución que ha pegado responde las consultas en tiempo O (1) usando una matriz para la cual res [A] [B] daría la respuesta requerida para un A, B en particular. Entonces, la tarea principal ahora es formar esa matriz de la manera más eficiente posible.
Para eso, veamos cómo encontrar el número de matrices que terminan en la fila i, que tienen miel> = K. Las matrices que terminan en la fila i, pueden comenzar cualquier fila j (1 <= j = K. Esto se puede resolver utilizando el método de dos punteros en tiempo O (N) amortizado.
Así que hemos descubierto la respuesta para las matrices que comienzan en la fila j y terminan en la fila i. Es fácil ver que el número de matrices que terminan en la fila i (comenzando en cualquier lugar) será la suma de todas las filas iniciales j. Como vimos anteriormente, esto se puede hacer en O (N) para un j particular, así que en O (N ^ 2) en general.
Del mismo modo, la respuesta completa será la suma de las matrices que terminan en la fila 1, fila 2, .. fila N. De nuevo para la fila i, lo hicimos en O (N ^ 2), por lo que para todas las filas finales tomará O (N ^ 3) Entonces la precomputación tomará un total de O (N ^ 3).
- ¿Cómo se mejora un algoritmo de aprendizaje automático basado en la experiencia?
- Cómo escribir un programa en C para buscar los elementos usando el orden de fusión
- Quiero comparar una consulta con varios documentos y asignarles una clasificación. ¿Qué algoritmo necesito usar?
- Cómo crear un algoritmo con una hoja de cálculo
- Cómo representar un número binario, como 110110011, en exceso de código 511