Competitive Programming Academy · Oppitunti

Erotustaulukot välin päivityksiin

Suorita useita koko välin lisäysoperaatioita nopeasti

Oppitunti 4/413 vaihetta

Erotustaulukot välin päivityksiin on ilmainen Competitive Programming Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Competitive Programming Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Competitive Programming Academy-kurssilla on yhteensä 4 oppituntia.

Kääntäkää ongelma toisinpäin

Prefix-summat vastasivat välikyselyihin nopeasti. Erotustaulukon avulla voitte puolestaan tehdä useita välin päivityksiä nopeasti. 🔁

Hidas tapa

Arvon lisääminen välin jokaiseen alkioon monta kertaa maksaa O(n) päivitystä kohden. Q päivityksen yhteydessä tämä kustannus kasvaa valtavaksi.

Tallentakaa muutokset

Sen sijaan että muuttaisitte jokaista solua, tallentakaa vain kohdat, joissa muutos alkaa ja päättyy. Merkitkää reunat, älkää keskiosaa.

Mitä erotustaulukko sisältää

Erotustaulukko tallentaa kunkin alkion ja sitä edeltävän alkion välisen eron. Yhden eron muokkaaminen siirtää vaikutusta koko myöhempään osuuteen.

Kahden merkinnän niksi

Lisätessänne arvon v välille l–r lisätkää v indeksissä l ja vähentäkää v indeksissä r + 1. Vain kaksi muokkausta kattaa koko välin.

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

Miksi vähennys

Indeksissä l oleva plusmerkki kytkee muutoksen päälle, ja indeksissä r + 1 oleva miinusmerkki kytkee sen jälleen pois päältä. Yhdessä ne rajaavat päivityksen yhteen väliin.

Tehkää kaikki päivitykset edullisesti

Jokainen päivitys vaatii vain kaksi taulukkoon kirjoittamista, joten q päivityksen tekeminen maksaa yhteensä O(q). Raskas työ siirtyy loppuun.

Palauttakaa lopullinen taulukko

Kun kaikki merkinnät on tehty, laskekaa erotustaulukosta prefix-summa. Yksi läpikäynti palauttaa jokaisen lopullisen arvon.

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

Varaa suojapaikka

Tehkää taulukosta yhden solun verran pidempi, jotta r + 1 ei koskaan ylitä sen loppua. Ylimääräinen suojapaikka estää indeksivirheet.

Kokonaiskustannus

Käytätte päivitysten merkitsemiseen O(q) aikaa ja yhden O(n):n läpikäynnin taulukon palauttamiseen. Yhdistetty kustannus on paljon pienempi kuin naiivi O(n kertaa q).

Missä se on parhaimmillaan

Erotustaulukot ovat parhaimmillaan varausmäärien, tietullien ja muiden sellaisten tehtävien yhteydessä, joissa on paljon välin lisäys -operaatioita ja yksi lopullinen lukukerta.

Pikatarkistus

Lisäätte arvon v jokaiseen alkioon indeksistä l indeksiin r.

Kertaus

Voitte koota välin päivitykset erotustaulukolla: merkitkää l ja r + 1 ja laskekaa sitten prefix-summa kerran taulukon palauttamiseksi. Nopeat päivitykset, yksi lukukerta. ✅

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Erotustaulukot välin päivityksiin” ilmainen?

Kyllä – oppitunnin ”Erotustaulukot välin päivityksiin” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Competitive Programming Academy-kurssin, päivitä CoddyKit PROhon. Competitive Programming Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Erotustaulukot välin päivityksiin”?

Suorita useita koko välin lisäysoperaatioita nopeasti Harjoittelet Competitive Programming Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Competitive Programming Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Competitive Programming Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Erotustaulukot välin päivityksiin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Competitive Programming Academy-oppitunnilla?

Kyllä. Jokainen Competitive Programming Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Prefix-summataulukon rakentaminen
  2. Minkä tahansa välin summa vähentämällä
  3. Tavoitesumman sisältävien alitaulukoiden laskeminen
  4. Erotustaulukot välin päivityksiin
← Takaisin: Competitive Programming Academy