Differenz-Arrays für Bereichsaktualisierungen
Führen Sie viele Bereichsadditionen schnell aus
Differenz-Arrays für Bereichsaktualisierungen ist eine kostenlose Competitive Programming Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Competitive Programming Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Competitive Programming Academy-Kurs umfasst insgesamt 4 Lektionen.
Drehen Sie das Problem um
Präfixsummen beantworten Bereichsabfragen schnell. Ein Differenzarray kehrt das Prinzip um und wendet viele Bereichsaktualisierungen schnell an. 🔁
Der langsame Weg
Wenn Sie bei vielen Wiederholungen jedem Element eines Bereichs einen Wert hinzufügen, kostet jede Aktualisierung O(n). Über q Aktualisierungen hinweg explodiert dieser Aufwand.
Speichern Sie nur die Änderungen
Statt jede Zelle anzufassen, speichern Sie nur, wo eine Änderung beginnt und wo sie endet. Markieren Sie die Ränder, nicht die Mitte.
Was ein Differenzarray speichert
Ein Differenzarray speichert die Differenz zwischen jedem Element und dem vorherigen. Wenn Sie eine solche Differenz ändern, verschieben Sie damit einen ganzen späteren Abschnitt.
Der Trick mit zwei Markierungen
Um v auf den Bereich von l bis r zu addieren, addieren Sie v am Index l und subtrahieren v am Index r + 1. Nur zwei Änderungen decken den gesamten Bereich ab.
diff[l] += v
diff[r + 1] -= vWarum das Minuszeichen
Das Plus bei l schaltet die Änderung ein, das Minus bei r + 1 schaltet sie wieder aus. Zusammen begrenzen sie die Aktualisierung auf einen Bereich.
Wenden Sie alle Aktualisierungen günstig an
Jede Aktualisierung besteht nur aus zwei Array-Schreibzugriffen, daher benötigen q Aktualisierungen insgesamt O(q). Die aufwendige Arbeit wird bis zum Ende aufgeschoben.
Stellen Sie das endgültige Array wieder her
Nachdem alle Markierungen gesetzt sind, berechnen Sie eine Präfixsumme des Differenzarrays. Dieser eine Durchlauf rekonstruiert jeden endgültigen Wert.
for i in range(1, n):
diff[i] += diff[i - 1]Planen Sie einen Schutzplatz ein
Machen Sie das Array um eine Zelle länger, damit r + 1 niemals über das Ende hinausgeht. Dieser zusätzliche Schutzplatz verhindert Indexfehler.
Der Gesamtaufwand
Sie benötigen O(q), um die Aktualisierungen zu markieren, und einen Durchlauf mit O(n), um das Array wiederherzustellen. Der kombinierte Aufwand liegt weit unter dem naiven O(n mal q).
Hier spielt es seine Stärke aus
Differenzarrays eignen sich hervorragend für Buchungszahlen, Mautgebühren und alle Aufgaben mit vielen Bereichsadditionen und einer abschließenden Ausgabe.
Kurzer Check
Sie addieren v zu jedem Element vom Index l bis r.
Zusammenfassung
Sie können Bereichsaktualisierungen mit einem Differenzarray bündeln: Markieren Sie l und r + 1 und berechnen Sie anschließend einmal die Präfixsumme, um das Array wiederherzustellen. Schnelle Aktualisierungen, einmaliges Auslesen. ✅
Lerne Python mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „Differenz-Arrays für Bereichsaktualisierungen“ kostenlos?
Ja — der vollständige Text von „Differenz-Arrays für Bereichsaktualisierungen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Competitive Programming Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Competitive Programming Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Differenz-Arrays für Bereichsaktualisierungen“?
Führen Sie viele Bereichsadditionen schnell aus Du übst Competitive Programming Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Competitive Programming Academy zu starten?
Keine Vorkenntnisse erforderlich. Competitive Programming Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Differenz-Arrays für Bereichsaktualisierungen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Competitive Programming Academy-Lektion Code schreiben und ausführen?
Ja. Jede Competitive Programming Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Ein Präfixsummen-Array erstellen
- Jeden Bereich durch Subtraktion summieren
- Teilarrays mit einer Zielsummme zählen
- Differenz-Arrays für Bereichsaktualisierungen