Dada una matriz A() de norte enteros, la tarea es imprimir el número de enteros i de 1 a N, para los cuales A contiene exactamente X enteros distintos (para X = 0 a N-1) mayores que Ai
Ejemplos:
Aporte: N = 6, A() = {2, 7, 1, 8, 2, 8}
Producción: {2, 1, 2, 1, 0, 0}
Explicación: Consideremos X = 2.
A(1) = 2: A contiene 2 enteros distintos mayores que 2 (7 y 8)
A(2) = 7: A contiene 1 entero distinto mayor que 7 (8)
A(3) = 1: A contiene 3 enteros distintos mayores que 1 (2, 7 y 8)
A(4) = 8: A no contiene ningún número entero distinto mayor que 8
A(5) = 2: A contiene 2 enteros distintos mayores que 2 (7 y 8)
A(6) = 8: A no contiene ningún número entero distinto mayor que 8
Entonces, la condición dada se cumple para i=1 y 5 en el caso de X=2.Aporte: N = 1, A() = {1}
Producción: 1
Acercarse: Para resolver el problema siga las siguientes observaciones:
Observaciones:
Si almacenamos la frecuencia de cada elemento de la matriz en un hashmap y lo ordenamos en orden decreciente según las claves, entonces:
Sea el hashmap – ((u1f1), (tu2f2)….(tunortefnorte)) donde fi es la frecuencia del elemento ui y u1 > u2 > ……un.
- Para cada i = 1 an, hay i – 1 enteros distintos que es mayor que ui. Entonces, para cada X=0 a n-1, la respuesta para X sería fX+1.
- La respuesta para X = n a N – 1 sería 0.
Con base en la observación anterior, se puede utilizar el siguiente enfoque para resolver el problema:
- Declare un mapa (por ejemplo, mp) e inserte los elementos de la matriz A en él.
- Iterar el mapa desde el ultimate e imprimir las frecuencias de los elementos.
- Para los elementos restantes (es decir, Nn), imprima Nn ceros.
El siguiente es el código basado en el enfoque anterior:
C++
// C++ code for the above method #embody <bits/stdc++.h> utilizing namespace std; #outline int lengthy lengthy // Perform to Print the variety of // integers i from 1 to N such that A // accommodates precisely X distinct integers // better than A{i) void Resolve(int N, int A()) { // Declaring the hashmap mp map<int, int> mp; // Inserting parts of A into mp for (int i = 0; i < N; i++) { mp(A(i))++; } // Discovering the scale of map int n = (int)mp.dimension(); // Printing the frequencies of // parts in map in reverse order for (auto it = mp.rbegin(); it != mp.rend(); it++) { cout << it->second << " "; } // Printing N-n zeroes for (int i = 1; i <= N - n; i++) { cout << 0 << " "; } } // Driver code int32_t major() { int N = 6; int A() = { 2, 7, 1, 8, 2, 8 }; // Perform Name Resolve(N, A); return 0; }
Complejidad del tiempo: O(N*log(N))
Espacio Auxiliar: EN)