Keď už máme zrátané prefixové sumy s[0], s[1], ... , s[n]
nejakého poľa s prvkami p[0], p[1], ... , p[n-1]
,
vieme rýchlo odpovedať na otázky typu
"Aký je súčet prvkov poľa s indexami medzi L
a R
?"
Stačí si uvedomiť, že s[R+1]
je rovné p[0] + p[1] + ... + p[R]
a s[L]
je rovné p[0] + p[1] + ... + p[L-1]
,
teda ich rozdiel s[R+1] - s[L]
je rovný p[L] + p[L+1] + ... + p[R]
,
čo je presne požadovaný súčet.
Ako odpoveď teda môžeme vrátiť číslo s[R+1] - s[L]
.
Ak v otázke používame polootvorený interval
a pýtame sa na súčet čísel s inexami z [L,R)
(teda vrátane p[L]
, ale bez p[R]
), výsledok je ešte jednoduchší: s[R] - s[L]
.
Všimnime si, že tu využívame,
že sme si definovali aj nultú prefixovú sumu s[0]
(ak sa nás niekto spýta na úsek začínajúci indexom 0).