Abbiamo un problema su come calcolare rapidamente le somme sull'intervallo l...r in un array statico a in meno di O(n) asintotici.
Dividiamo l'array a in k blocchi della stessa dimensione e calcoliamo prima la somma degli elementi per ciascuno di essi.
Ora, quando rispondiamo alla richiesta, possiamo esaminare gli elementi dell'array a e aggiungerli al risultato, anche se uno dei blocchi si trova all'interno del segmento, allora possiamo aggiungere la sua somma al risultato e saltare il elementi di questo blocco.
Il numero massimo di operazioni per query con questo algoritmo è n / k + k, quindi il k ottimale è uguale alla radice quadrata di n.