█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 6146

Problema 0x62 - Contar elementos mayores a X en un arreglo pequeño

  • Autor: rpedrazacoello
  • Fecha: 2022-05-24 01:49:21 UTC (Hace casi 2 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.082 s 16 KBi
#2
Incorrecto
0.086 s 16 KBi
#3
Correcto
0.077 s 16 KBi
#4
Correcto
0.125 s 18 KBi
#5
Correcto
0.079 s 16 KBi
#6
Incorrecto
0.087 s 16 KBi
#7
Incorrecto
0.092 s 16 KBi
#8
Incorrecto
0.097 s 16 KBi
#9
Correcto
0.099 s 16 KBi
#10
Correcto
0.097 s 17 KBi
Puntos totales: 60 / 100

Código

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n];

        for(int i=0; i<n; i++){
            a[i] = scanner.nextInt();
        }

        Arrays.sort(a);

        int c = scanner.nextInt();

        for(int i=0; i<c; i++){
            int consulta = scanner.nextInt();
            int index = findSuccesor(a, 0, n-1, consulta);
            System.out.println(n - index);
        }
    }

    private static int findSuccesor(int a[], int start, int end, int search) {
        if(end == start + 1 || end == start){
            if(search < a[start] && a[start] < a[end]){
                return start;
            }

            if(search < a[end]){
                return end;
            }

            return a.length;
        }

        int middle = (end+start)/2;


        boolean flag = true;
        if(middle - 1 >= 0){
            if(search <= a[middle-1]){
                flag = false;
            }
        }

        if(middle + 1 < a.length){
            if(a[middle] == a[middle+1]){
                flag = false;
            }
        }

        if(search >= a[middle]){
            flag= false;
        }

        if(flag) {
            return middle;
        }

        if (search<a[middle]){
            return findSuccesor(a, start, middle-1, search);
        } else {
            return findSuccesor(a, middle+1, end, search);
        }
    }
}