Summera valfritt intervall med subtraktion
Besvara range[l..r] på konstant tid
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. ✅
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
- Bygg en prefixsumme-array
- Summera valfritt intervall med subtraktion
- Räkna delarrayer med en målsumma
- Differensarrayer för intervalluppdateringar