Devo mantenere una raccolta su numeri interi compresi tra 0 e 65535 in modo da poter eseguire rapidamente le seguenti operazioni:
- Inserisci un nuovo numero intero
- Inserisci un intervallo di numeri interi contigui
- Rimuovi un numero intero
- Rimuovi tutti i numeri interi sotto un numero intero
- Verifica se è presente un numero intero
I miei dati hanno la proprietà che spesso contiene esecuzioni di numeri interi nella raccolta. Ad esempio, la raccolta potrebbe essere in un determinato momento:
{ 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 }
L'approccio più semplice è solo quello di usare un albero binario bilanciato come il C ++ std :: set, tuttavia, usando quello, non sto sfruttando il fatto che ho spesso serie di numeri. Forse sarebbe meglio conservare una collezione di gamme? Ciò significa che un intervallo deve essere in grado di essere suddiviso se viene rimosso un numero intero al suo centro o unito se lo spazio tra due intervalli viene riempito.
Esistono strutture dati esistenti che potrebbero essere adatte a questo problema?