Se me ocurre un árbol binario con dos datos:
Un entero que representa el ID del animal.
Un campo de bits de dos bits (o un entero que representa banderas) indicando si nadó en el primer mar y en el segundo.
Funciona así:
Cuando recibes el ID de un animal primero miras si está en el árbol. Si no está lo añades: a la rama de la izquierda si el número es menor al del nodo y a la derecha si el número es mayor al del nodo. Si no conoces el algoritmo hay muchos ejemplos en internet.
Ahora indicar en que mar a ha nadado usando el cambo de bits (o las banderas).
Una vez que has consumido todas las entradas vuelves a recorrer el árbol informando únicamente de los nodos que tienen han tienen los dos campos de bits activos (o un 3 si has usado un entero para banderas).
Un entero que representa el ID del animal.
Un campo de bits de dos bits (o un entero que representa banderas) indicando si nadó en el primer mar y en el segundo.
Funciona así:
Cuando recibes el ID de un animal primero miras si está en el árbol. Si no está lo añades: a la rama de la izquierda si el número es menor al del nodo y a la derecha si el número es mayor al del nodo. Si no conoces el algoritmo hay muchos ejemplos en internet.
Ahora indicar en que mar a ha nadado usando el cambo de bits (o las banderas).
Una vez que has consumido todas las entradas vuelves a recorrer el árbol informando únicamente de los nodos que tienen han tienen los dos campos de bits activos (o un 3 si has usado un entero para banderas).