Descripción del título
Cada año en el 1024 Programmer Festival, Dark Horse Programmers llevará a cabo una gran celebración. El Día del Programador de este año no es una excepción, y cada compañero de clase envía naranjas.
En la clase, hay n estudiantes en fila de adelante hacia atrás, y han aprendido los resultados de estos estudiantes, de los cuales el puntaje del estudiante i-ésimo es ai . El director quiere evaluar la cantidad de naranjas según los puntajes de los estudiantes en la etapa anterior. Para motivar a los estudiantes sobresalientes, se deben cumplir los siguientes requisitos al enviar naranjas:
- Debe haber más naranjas entre los estudiantes con buenas calificaciones en la clase adyacente. Si los compañeros de clase adyacentes tienen las mismas calificaciones, deben recibir la misma cantidad.
- A cada alumno se le asigna al menos una naranja
Debido al presupuesto limitado, el director espera emitir la menor cantidad posible de naranjas de acuerdo con los requisitos. Disculpe, ¿cuántas naranjas necesito preparar?
Formato de entrada
La primera línea es un número entero positivo n que no excede 10 ^ 6 , que indica el número de estudiantes.
En la siguiente línea, hay n enteros no negativos ai que no exceden 10 ^ 9 , lo que indica la puntuación del i- ésimo compañero de clase.
Formato de salida
Produzca la respuesta, es decir, cuántas naranjas deben prepararse.
Entrada de muestra:
11
3 6 9 4 7 7 2 13 15 15 19
Salida de muestra:
24
Idea: Esta es una subcolumna no decreciente hacia adelante y hacia atrás. Inicialice a todos para que tengan una naranja, y luego atraviese la matriz, esta última es más alta que la puntuación anterior, luego la naranja es una más, y luego repita nuevamente la matriz, también Encuentre las subcolumnas sin restar y finalmente sume la matriz para sumar.
#include <cstdio> #include < string .h> #include <iostream> #include <algorithm> #include <sstream> #include <math.h> #include <map> usando el espacio de nombres std; const int inf = 999999 ; // 0x7fffff const long long mod = 1e9 + 7 ; const doble PI = acos (- 1 ); largo largo n, m; largo largo ans = 0 ; boolvis [ 105 ]; long long dis [ 10000000 ], get [ 10000000 ]; int main () { cin >> n; for ( int i = 1 ; i <= n; i ++ ) { cin >> dis [i]; get [i] = 1 ; // Inicializa la matriz get, porque cada alumno tiene al menos 1 naranja } para ( int i = 2 ; i <= n; i ++) { // escanea la matriz de izquierda a derecha, equivalente a de izquierda a derecha para encontrar columnas niño sin disminuir si(dis [i]> dis [i- 1 ]) { // Si la puntuación del siguiente alumno es mayor que el número de naranjas del alumno anterior, hay una naranja más que la del alumno anterior get [i] = get [i- 1 ] + 1 ; } de lo contrario if (dis [i] == dis [i- 1 ]) { // El puntaje es igual al número de naranjas también debe ser igual get [i] = get [i- 1 ]; } } for ( int i = n- 1 ; i > = 1 ; i-) { // Luego escanea la matriz de derecha a izquierda nuevamente, también encuentra la subcolumna no decreciente de derecha a izquierda if (dis [i]> dis [i + 1 ]) { get [i] = max ( get [i], get [i + 1 ] + 1 ); // Del mismo modo, el número de naranjas con notas altas es uno más que el número de naranjas con notas bajas siguientes El mayor del último resultado y el resultado anterior } else if (dis [i] == dis [i + 1 ]) { // El número de naranjas iguales también debe ser igual get [i] = get [i + 1 ]; } } para ( int i = 1 ; i <= n; i ++) { // acumula el número de naranjas ans + = get [i]; } cout << ans; devuelve 0 ; }