Wir haben ein bisschen Platz. Wenn es keine Veränderung gibt, können wir die Bedeutung bestimmter Funktionen im Unterabschnitt dieses Körpers schnell finden (soweit die Linie ist). Dazu müssen wir zusätzliche Speicher und Vorzählung verwenden.
Zum Beispiel müssen wir die Summe schnell auf einem Teil der Masse finden.
Wir werden eine Reihe von Präfixbeträgen einrichten, die nach Index (i) die Summe aller Elemente der Masse mit niedrigeren oder gleichen i Indizes sein wird.
a[] - die Masse, p[] - die Menge der vorfixierten Beträge


Berechnung der Masse p:
Offensichtlich p[0] = a[0]. Wir weisen darauf hin, dass wir p[i] einfach durch p[i - 1] neu berechnen können, da der Betrag auf Präfix i die Summe auf Präfix i - 1 + a[i] ist.
Somit ist der Vorgabezählcode wie folgt:

HTML generiert mit Hilite. ich
in a[n], p[n];
p.0)! = a[0);
für (seufzt)in I = 1, i / n, i++)
p[i] = p[i]  1! + a[i];

Wir werden weiter darauf hinweisen, dass die Menge auf dem Schnitt der Unterschied zwischen zwei Mengen auf dem Präfix ist.


Grün = rot - blau
Wenn also ein Betrag in [l,r] zu finden ist, ist die Antwort gleich p[r] - p[l-1].
Wenn ich jedoch ein Element ist, kann es nicht existieren. Um frei von den if's zu sein, kann ein Indizierung eingeführt werden, und in einem[0] und p[0] neutralen Werten (0 für die Summe).

Es sei darauf hingewiesen, dass dieser Empfang ein privater Fall der Ausschlussformel ist, so dass es möglich ist, nicht nur Summen, sondern auch andere Funktionen, wie Multiplikation und xor zu speichern.