Entrando nel dettaglio.
Come ti dicevo in sede privata @rossimelthomas dovresti puntare sul vedere bottomup dovunque.
Se stai facendo problemi a query, la lettura a blocco delle query e la scrittura in blocco dei risultati rende il tutto un filino più veloce (l’ottimizzazione funziona meglio se i programmi sono CPU-bound quindi evita di “stoppare” l’algoritmo sul più bello stampando o leggendo roba).
Se vuoi fai anche una sana lettura sul funzionamento intrinseco di CPU cache e di località spaziale e temporale.
Se poi approfondissimo ci sarebbe anche la faccenda dell’allineamento, o il branch prediction, ma esuliamo dall’aspetto competitive.
Un ultima cosa va detta:
O(logN) non è necessariamente meglio di O(N)! Conosco gente che costruisce delle map per convertire poche chiavi in pochi valori anziché fare switch/case. Fidatevi, ce ne vuole prima che la differenza conti qualcosa.