01პრეფიქსული ჯამები: ერთხელ გამოთვალე, მყისიერად უპასუხე
a[l..r]-ის ციკლით შეჯამება ყოველ კითხვაზე O(n) ღირს. მილიონი კითხვისთვის ეს ზედმეტად ნელია.
სანაცვლოდ ერთხელ ააგე პრეფიქსული ჯამები: p[0] = 0 და p[i+1] = p[i] + a[i]. ესე იგი p[i] პირველი i ელემენტის ჯამია.
ახლა ნებისმიერი შუალედის ჯამი ერთი გამოკლებაა:
sum(a[l..r]) = p[r+1] − p[l]
p[r+1] ყველაფერს მოიცავს r-მდე, p[l] კი l-მდე ნაწილს აკლებს. სურათზე: a[2..5] = p[6] − p[2] = 23 − 4 = 19.
აგება O(n)-ია, ყოველი კითხვა O(1). ფრთხილად ერთით აცდენასთან: p-ს n+1 ელემენტი აქვს და p[i] ნიშნავს „i ინდექსამდე“.