Competitive Programming Academy · Lektion

Differensarrays til intervalopdateringer

Udfør mange interval-add-operationer hurtigt

Lektion 4 af 413 trin

Differensarrays til intervalopdateringer er en gratis Competitive Programming Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Competitive Programming Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Competitive Programming Academy-kurset indeholder 4 lektioner i alt.

Vend problemet om

Præfikssummer besvarede intervalforespørgsler hurtigt. Et differensarray vender det om, så du hurtigt kan udføre mange intervalopdateringer. 🔁

Den langsomme metode

At lægge en værdi til hvert element i et interval, gentaget mange gange, koster O(n) pr. opdatering. For q opdateringer eksploderer den omkostning.

Gem ændringerne

I stedet for at ændre hver celle skal du kun registrere, hvor en ændring begynder, og hvor den slutter. Markér kanterne, ikke midten.

Hvad et differensarray indeholder

Et differensarray gemmer forskellen mellem hvert element og det foregående. Hvis du ændrer én forskel, forskyder det et helt efterfølgende stykke.

Tricket med to markeringer

For at lægge v til fra l til r skal du lægge v til ved indeks l og trække v fra ved indeks r + 1. Bare to ændringer dækker hele intervallet.

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

Hvorfor minusset

Plusset ved l aktiverer ændringen, og minusset ved r + 1 slår den fra igen. Tilsammen begrænser de opdateringen til ét interval.

Anvend alle opdateringer billigt

Hver opdatering består kun af to skrivninger i arrayet, så q opdateringer tager O(q) i alt. Det tunge arbejde udsættes til sidst.

Genskab det endelige array

Når alle markeringer er placeret, skal du beregne en præfikssum af differensarrayet. Dette ene gennemløb genskaber alle de endelige værdier.

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

Dimensionér med en sikkerhedsplads

Gør arrayet én plads længere, så r + 1 aldrig løber ud over enden. Den ekstra sikkerhedsplads forhindrer indeksfejl.

De samlede omkostninger

Du bruger O(q) på at markere opdateringerne og ét gennemløb på O(n) for at genskabe arrayet. Den samlede omkostning er langt mindre end den naive O(n gange q).

Her vinder det

Differensarrays er nyttige til optælling af bookinger, vejafgifter og alle problemer med mange intervaltilføjelser og én endelig aflæsning.

Hurtigt tjek

Du lægger v til hvert element fra indeks l til r.

Opsummering

Du kan samle intervalopdateringer i et differensarray: markér l og r + 1, og beregn derefter præfikssummen én gang for at genskabe arrayet. Hurtige opdateringer, én aflæsning. ✅

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Differensarrays til intervalopdateringer” gratis?

Ja — hele teksten til “Differensarrays til intervalopdateringer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Competitive Programming Academy-kurset, skal du opgradere til CoddyKit PRO. Competitive Programming Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Differensarrays til intervalopdateringer”?

Udfør mange interval-add-operationer hurtigt Du øver dig i Competitive Programming Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Competitive Programming Academy?

Der kræves ingen tidligere erfaring. Competitive Programming Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Differensarrays til intervalopdateringer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Competitive Programming Academy-lektion?

Ja. Alle Competitive Programming Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Byg et præfiksum-array
  2. Summér ethvert interval med subtraktion
  3. Tæl subarrays med en målsum
  4. Differensarrays til intervalopdateringer
← Tilbage til Competitive Programming Academy