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] -= vDlaczego 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
- Tworzenie tablicy sum prefiksowych
- Sumowanie dowolnego zakresu przez odejmowanie
- Zliczanie podtablic o zadanej sumie
- Tablice różnicowe do aktualizacji zakresów