Esto es básicamente una pregunta de partición de espacio. Tiene un gran espacio con contenedores y un punto específico en ese espacio, ¿a qué contenedores toca? Muchos juegos tienen que resolver este problema, por lo que no sería una mala idea comenzar allí. Busque artículos sobre "detección de colisión de fase amplia".
La forma más sencilla de hacerlo es dividir el espacio de números en un número constante de piezas. Cada pieza sabe qué conjuntos se cruzan con ella, algo que usted calcula cada vez que se agrega un nuevo conjunto. Ahora, en lugar de probar cada conjunto individual cuando tiene un punto, solo necesita verificar los conjuntos contenidos en la pieza en la que se encuentra el punto.
Otro algoritmo general y eficiente utilizado es Partición de espacio binario. Este algoritmo subdivide tu espacio en dos lados. Cada lado sabría qué conjuntos se cruzan con él. Puede repetir este proceso recursivamente con la precisión deseada (aunque no tiene sentido crear una subdivisión más pequeña que el rango de su conjunto más pequeño).
¿Restricciones de memoria? – ChaosPandion
Sin restricciones de memoria –
Soluciones Java: https://stackoverflow.com/questions/13399821/data-structures-that-can-map-a-range-of-keys-to-a-value – Vadzim