字首和和差分

2021-10-20 15:25:09 字數 1287 閱讀 8319

字首和和差分是兩種預處理方法。

都需要新建乙個陣列

#include

using

namespace std;

intmain()

;int b[

100]=;

int c[

100]=;

//字首和

for(

int i =

1; i <=

100; i++

)//差分

for(

int j =

1; j <=

100; j++

)}

字首和相對容易理解,差分的意義是什麼?

差分的操作核心是求出源陣列每兩個資料之間的差,類似於記錄增降得資料。

當我們需要將乙個陣列得一段資料都加上乙個數,比如a——b之間每乙個資料都需要加上乙個x,我們只需要對差分陣列a加上x,對差分陣列b+1得地方減去乙個x,就可以完成處理。

字首和差分陣列還有二維的:

如下

#include

using

namespace std;

const

int n =

1000

;int a[n]

[n], s[n]

[n];

intmain()

while

(q--)}

return0;

}

這個就是對乙個陣列進行了字首和處理,並輸出了字首和陣列。

二維差分:

#include

using

namespace std;

const

int n =

1010

;int n, m, q;

int a[n]

[n], s[n]

[n];

intmain()

for(

int i =

1; i <= n; i++

)for

(int j =

1; j <= m; j++

) s[i]

[j]= a[i]

[j]+ s[i -1]

[j]+ s[i]

[j -1]

- s[i -1]

[j -1]

;for

(int i =

1; i <= n; i++

)return0;

}

return code;

字首和 差分

數列的字首和 sum i 表示a 1 a i 的和 用處1 求i j的和sum j sum i 1 用處2 區間修改。設定乙個change陣列。當區間 i,j 上要加k時,我們令change i k,令change j 1 k。如果我們對change陣列求字首和的話,字首和sum change i ...

字首和 差分

有n個數和q次操作,每一次操作指明了要操作的區間 l,r 以及讓該區間內的所有元素全部加c 輸出q次操作後所有元素的大小 第一行 n q 1 n,q 2 105 第二行 n個數 a1,a2 an 106 ai 106 接下來q 行 每行3個數 l r c 表示 l,r 區間內每個數加c 1 l r ...

字首和 差分

顧名思義 用某乙個陣列來記錄陣列a前i項和,這個還可以用來求區間 l,r 的和 s r s l 1 因為第l項也在區間內 話不多說,直接上例題 leetcode 5393 ac const int maxn 1e5 5 class solution int ans 0 for int i 0 i k...