字首和初步

2022-06-21 17:42:10 字數 1076 閱讀 8038

參考部落格:

謝謝大佬的部落格= =

對於字首和的建立

首先對0行0列置零

公式如下:

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

二維字首和

與一維字首和類似,設s[i][j]表示所有a[i'][j']的和。(1≤i'≤i,1≤j'≤j)

有一點像「矩形的面積」那樣,把一整塊區域的值都加起來。

字首和的用途

一般用來求區間和。

對於一維情況,現在我給出乙個數列a,要求你回答m次詢問,每次詢問下標j到k的和。樸素的做法顯然是對於每次詢問都執行一次相加操作,然後輸出結果。這樣做是正確的,但是當m過大時就會導致計算次數過多而有可能超時。

超時的原因一目了然,重複計算。那麼我們應該怎麼改進這個方法呢?想象一下,我們如果先提前算好了每乙個位置的字首和,然後用s[k]-s[j],結果不就是我們這次詢問的答案嗎?這樣便會使計算量大大減小。

對於二維的區間和,也是類似的。

然後是區間查詢:

int ans=b[x2][y2]-b[x2][y1-1]-b[x1-1][y2]+b[x1-1][y1-1];
然後全部**:

//

good luck~

#includeusing

namespace

std;

const

int maxd=10000+10

;int

a[maxd][maxd],b[maxd][maxd];

intmain()

for(int i=1;i<=n;i++)

intx1,x2,y1,y2;

cin>>x1>>y1>>x2>>y2;

int ans=b[x2][y2]-b[x2][y1-1]-b[x1-1][y2]+b[x1-1][y1-1

]; cout

<

return0;

}

字首和演算法 一維字首和 二維字首和

輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l,r。對於每個詢問,輸出原序列中從第l個數到第r個數的和。輸入格式 第一行包含兩個整數n和m。第二行包含n個整數,表示整數數列。接下來m行,每行包含兩個整數l和r,表示乙個詢問的區間範圍。輸出格式 共m行,每行輸出乙個詢問的結果。資...

字首和 (1)什麼是字首和和一維字首和

字首和 prefix sum 的定義為 對於乙個給定的數列 a,它的字首和數列 s 是通過遞推能求出來得 例如 假設陣列a和字首和陣列s都已經定義 int i 初始條件 a 0 0 s 0 0 for i 1 i n i 下面我們用乙個模板題,將完整的一維陣列字首和做乙個簡單的展示。題目鏈結 inc...

python字首 python字首和演算法

我試圖理解字首和概念背後的思想,看看codity here 蘑菇揀選器問題 在字首和課程中給出的例子 我的理解是,整個概念是基於乙個簡單的屬性,即為了求陣列a的兩個位置a pos left,pos right 之間的所有元素的和,使用第二個陣列p,其中所有元素都是連續求和的,其中搜尋到的和計算為 值...