Podemos considerar esto como un problema de las señales analógicas en electrónica, intente convencerse de que cuando nos movemos de izquierda a derecha en la matriz solo necesitamos evitar una condición que recientemente bajamos y ascendemos o mantenemos en el momento dado nivel, por lo que para memorizarlo podemos usar una matriz lft [] que nos da el índice de la última posición en la matriz desde el índice 1 a i-1 cuando estamos actualmente en la i-ésima posición en la matriz de manera que un [i ] <= a [k] y 1 <= k <= i-1 y no hay elementos entre k + 1 th a i-th de modo que sea menor que a [i] y mayor que a [k], por lo tanto podemos reprimir esto como
lft [i] = (a [i] <= a [i-1])? izquierda [i-1]: i
Esta es la función estrictamente decreciente.
De manera similar, podemos usar otra matriz rgt [] y escanear la matriz dada en orden inverso, es decir, de derecha a izquierda, de modo que la idea sea justo lo contrario de la idea anterior de calcular lft [], siendo esta idea
rgt [i] = a [i] <= a [i + 1]? rgt [i + 1]: i
Esta es una función estrictamente creciente.
Por lo tanto, cuando se nos da una consulta para encontrar la respuesta del rango [L, R],
solo necesitamos verificar si rgt [L]> = lft [R], si esto se cumple podemos obtener una escalera “SÍ” o no podemos obtener la escalera “NO”.
Para la idea de implementación, puede echar un vistazo a este código:
Sumisión # 10527832 – Codeforces
Espero que ayude 🙂
- ¿Cómo se me ocurre una fórmula de suma para iterar sobre una matriz y cambiar el índice inicial con cada iteración?
- ¿Por qué las matemáticas son importantes para la inteligencia artificial y el aprendizaje automático?
- Cómo mejorar las matemáticas básicas para programar
- ¿Puedo aplicar a la escuela de posgrado para estudiar informática teórica?
- ¿Cuáles son algunas aplicaciones interesantes y menos conocidas de la ciencia de datos (aprendizaje automático, gráficos aleatorios, altas dimensiones, etc.) al comercio electrónico?