En primer lugar, cuando vea N (≤10 ^ 5), debe pensar que esta pregunta no puede ser violenta y definitivamente terminará el tiempo de espera.
Ordene primero los datos de distancia y luego abra una tabla hash; por ejemplo, hash [i] almacena el número de días mayor que i kilómetros.
Luego comience a enumerar desde n, y genere el primer número que coincida con el número de Eddington.
Preste atención al error de 3 segmentos del punto de prueba: debido a que el título solo dice que n es menor que 10 ^ 5, y no da el rango de distancia, la tabla hash solo se abre a la quinta potencia de 10, allí será un error de segmento, intente ampliarlo tanto como sea posible.
#include <cstdio>
#include <algorithm>
using namespace std;
int hashTable[1001000] = {
0};
int main(){
int n;
scanf("%d", &n);
int arr[n];
for(int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
sort(arr, arr+n);
if(arr[0] > n){
printf("%d", n);
return 0;
}
int num = 0;
for(int i=0; i<n; i++){
hashTable[arr[i]] = i + 1;
}
for(int i=1; i<1001000; i++){
if(hashTable[i] == 0){
hashTable[i] = hashTable[i-1];
}
}
for(int i=n; i>=0; i--){
int day = n - hashTable[i];
if(day >= i){
printf("%d", i);
break;
}
}
return 0;
}