0Pricing
Competitive Programming Academy · Lekcja

Tablice różnicowe do aktualizacji zakresów

Szybkie wykonywanie wielu operacji dodawania do zakresu

Tablice różnicowe do aktualizacji zakresów to bezpłatna lekcja Competitive Programming Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Competitive Programming Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Competitive Programming Academy zawiera 4 lekcji w sumie.

Odwrócenie problemu

Sumy prefiksowe szybko odpowiadały na zapytania dotyczące zakresów. Tablica różnicowa odwraca ten pomysł i pozwala szybko wykonywać wiele aktualizacji zakresów. 🔁

Powolna metoda

Dodawanie wartości do każdego elementu zakresu, powtarzane wiele razy, kosztuje O(n) na aktualizację. Przy q aktualizacjach ten koszt gwałtownie rośnie.

Zapisywanie zmian

Zamiast modyfikować każdą komórkę należy zapisać tylko miejsce, w którym zmiana się zaczyna, oraz miejsce, w którym się kończy. Należy oznaczyć krawędzie, a nie środek.

Co przechowuje tablica różnicowa

Tablica różnicowa przechowuje różnicę między każdym elementem a elementem poprzednim. Zmiana jednej różnicy przesuwa później całą serię wartości.

Sztuczka z dwoma oznaczeniami

Aby dodać v do elementów od l do r, należy dodać v pod indeksem l i odjąć v pod indeksem r + 1. Tylko dwie modyfikacje obejmują cały zakres.

diff[l] += v
diff[r + 1] -= v

Dlaczego odejmowanie

Dodanie wartości pod indeksem l włącza zmianę, a odjęcie jej pod indeksem r + 1 ją wyłącza. Razem ograniczają aktualizację do jednego zakresu.

Tanie stosowanie wszystkich aktualizacji

Każda aktualizacja wymaga tylko dwóch zapisów do tablicy, więc q aktualizacji zajmuje łącznie O(q). Najbardziej pracochłonna część jest odroczona do końca.

Odtworzenie tablicy końcowej

Po umieszczeniu wszystkich oznaczeń należy obliczyć sumę prefiksową tablicy różnicowej. Jedno przejście odtwarza każdą wartość końcową.

for i in range(1, n):
    diff[i] += diff[i - 1]

Rozmiar z dodatkową komórką ochronną

Tablica powinna mieć o jedną komórkę więcej, aby r + 1 nigdy nie wychodziło poza jej koniec. Ta dodatkowa komórka ochronna zapobiega błędom indeksowania.

Łączny koszt

Na oznaczenie aktualizacji potrzeba O(q), a na jedno przejście odtwarzające tablicę O(n). Łączny koszt jest znacznie mniejszy niż naiwny O(n razy q).

Gdzie to rozwiązanie wygrywa

Tablice różnicowe świetnie sprawdzają się przy zliczaniu rezerwacji, opłatach drogowych i każdym problemie z wieloma operacjami dodawania do zakresu oraz jednym końcowym odczytem.

Szybki sprawdzian

Należy dodać v do każdego elementu od indeksu l do r.

Podsumowanie

Można grupować aktualizacje zakresów za pomocą tablicy różnicowej: oznaczyć l oraz r + 1, a następnie raz obliczyć sumy prefiksowe, aby odtworzyć tablicę. Szybkie aktualizacje, pojedynczy odczyt. ✅

Często zadawane pytania

Czy lekcja „Tablice różnicowe do aktualizacji zakresów” jest bezpłatna?

Tak — pełny tekst „Tablice różnicowe do aktualizacji zakresów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Competitive Programming Academy, przejdź na CoddyKit PRO. Kurs Competitive Programming Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Tablice różnicowe do aktualizacji zakresów”?

Szybkie wykonywanie wielu operacji dodawania do zakresu Ćwiczysz Competitive Programming Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Competitive Programming Academy?

Nie wymagamy żadnego doświadczenia. Competitive Programming Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Tablice różnicowe do aktualizacji zakresów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Competitive Programming Academy?

Tak. Każda lekcja Competitive Programming Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie tablicy sum prefiksowych
  2. Sumowanie dowolnego zakresu przez odejmowanie
  3. Zliczanie podtablic o zadanej sumie
  4. Tablice różnicowe do aktualizacji zakresów
← Powrót do Competitive Programming Academy