Module: Präfixsummen


Problem

1 /8


Summe pro Strecke

Theory Click to read/hide

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.

Problem

Ein unveränderliches Array der Länge n und q Abfragen vom Typ “Berechnen Sie die Summe, die das Array von l nach r” unterschneidet. Geben Sie eine Antwort auf jede Anfrage aus.

Eingabe
Die erste Zeile enthält die Zahl n – die Größe des Arrays (\(1 <= n <= 10^5\)). Die zweite Zeile enthält n Zahlen – Array-Elemente. Die Zahlen sind modular nicht größer als \(10^9\). Die dritte Zeile enthält die Zahl q – Anzahl der Abfragen (\(1 <= q <= 10^5\)). Im Folgenden werden q Zeilen angegeben, die jeweils zwei Zahlen enthalten: l und r (\(1 <= l <= r <= n\)).

Ausgabe
Geben Sie die Antworten auf alle Anfragen in einer separaten Zeile aus.
 

 

Beispiele
Eingabe Ausgabe
1
5
1 2 3 4 5
3
1 2
3 3
2 5
3
3
14