Competitive Programming Academy · Lektion

Summera valfritt intervall med subtraktion

Besvara range[l..r] på konstant tid

Lektion 2 av 413 steg

Summera valfritt intervall med subtraktion är en gratis lektion i Competitive Programming Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Competitive Programming Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Competitive Programming Academy innehåller totalt 4 lektioner.

Den verkliga vinsten

Att bygga prefixarrayen var förberedelsen. Nu kommer det magiska: att besvara valfri intervallsumma med en enda subtraktion. ⚡

Grundidén

En intervallsumma är helt enkelt en stor totalsumma minus en mindre. Genom att subtrahera två prefixvärden tar du enkelt bort allt utanför intervallet.

Formeln

För att summera elementen från l till r tar Ni prefix[r + 1] minus prefix[l]. Den här enda formeln fungerar för alla intervall.

range_sum = prefix[r + 1] - prefix[l]

Varför det fungerar

prefix[r + 1] innehåller allt fram till och med r, medan prefix[l] innehåller allt före l. Skillnaden lämnar exakt mittsegmentet.

Ett genomarbetat exempel

För [3, 1, 4] är prefix [0, 3, 4, 8]. För att summera index 1 till 2 tar Ni 8 minus 3, vilket ger 5. Det stämmer med 1 plus 4.

Frågor i konstant tid

Varje fråga består bara av en subtraktion, så den körs på O(1). Tusen frågor kostar lika mycket per fråga som en enda.

Se upp med indexförskjutningen

Det vanligaste misstaget är indexet vid den övre gränsen. Med en inledande nolla använder Ni alltid prefix[r + 1], inte prefix[r]. Kontrollera den gränsen.

Inkluderande eller exkluderande

Avgör tidigt om r ska ingå. Den här formeln behandlar intervallet som inkluderande av både l och r, vilket de flesta tävlingsproblem förväntar sig.

Bädda in det i en funktion

En liten hjälpfunktion gör logiken lättläst och samlar indexhanteringen på ett ställe. Använd den här hjälpfunktionen i stället för att skriva ut matematiken direkt.

def query(l, r):
    return prefix[r + 1] - prefix[l]

Hantera hela arrayen

För att summera hela arrayen frågar Ni efter l lika med 0 och r lika med n minus 1. Formeln ger prefix[n], alltså totalsumman.

Här kommer det till sin rätt

När ett problem ställer många frågor om intervallsummor i en oföränderlig array omvandlar prefixsummor en O(n)-loop per fråga till omedelbara svar.

Snabbkontroll

Ni vill ha summan av index l till och med r.

Sammanfattning

Ni kan nu besvara alla intervallsummor i O(1) med prefix[r + 1] minus prefix[l]. Tänk på förskjutningen från den inledande nollan, så undviker Ni buggar. ✅

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Summera valfritt intervall med subtraktion” gratis?

Ja – hela texten till ”Summera valfritt intervall med subtraktion” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Competitive Programming Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Competitive Programming Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Summera valfritt intervall med subtraktion”?

Besvara range[l..r] på konstant tid Ni övar på Competitive Programming Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Competitive Programming Academy?

Du behöver inga förkunskaper. Utbildningen i Competitive Programming Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Summera valfritt intervall med subtraktion”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Competitive Programming Academy-lektionen?

Ja. Varje Competitive Programming Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Bygg en prefixsumme-array
  2. Summera valfritt intervall med subtraktion
  3. Räkna delarrayer med en målsumma
  4. Differensarrayer för intervalluppdateringar
← Tillbaka till Competitive Programming Academy