Sto risolvendo un problema e mi sono reso conto che ho bisogno di una struttura dati con le seguenti proprietà, ma non riesco a trovarne una anche dopo poche ore di googling. Credo che la libreria STL sia troppo ricca per non avere questo, chiedendo quindi qui.Quale struttura dati per trovare il numero di elementi in un determinato intervallo in O (log n) tempo?
- inserire qualsiasi elemento (dovrebbe essere in grado di contenere quelle ripetitiva) in
O(log(n))
tempo - Rimuovere un elemento in
O(log(n))
tempo pure. - Se voglio query per il numero di elemenes nell'intervallo [a, b], ho dovrei ottenere che contano in
O(log(n))
volta ..
Se dovessi scrivere da zero, per la parte 1 e 2, vorrei usare uno set
o e vorrei modificare il loro metodo find()
(che viene eseguito nel tempo) per restituire indici invece di iteratori in modo che io possa fare abs(find(a)-find(b))
così ottengo il conteggio degli elementi nel tempo di log (N) . Ma sfortunatamente per me, find()
ritorna e iteratore.
Ho esaminato multiset()
e non è stato possibile soddisfare il requisito 3 nel tempo O(log(n))
. Ci vuole O(n)
.
Eventuali suggerimenti per farlo facilmente?
Nessun downvotes senza commenti, per favore !! – Anoop
Non ho il mio fedele libro di guida, ma se riesci ad ottenere "L'Algorithm Design Manual" di "Skiena, Steven S" fallo. È il mio andare fonte di algoritmi. – ntroncos
Sono sicuro che le tabelle hash abbiano il log (n) per tutto ma non sono sicuro –