字首和與差分

2021-09-28 18:25:56 字數 1220 閱讀 8849

例題入口

#include

const

int n =

320;

int a[n * n]

;//a[i] = 1 a[i] = 0;

//1. 對a 求出平方數 將其值置為1 不是平方數就是0

//2. 對a求乙個字首和

//3.對 a,b 求乙個部分和

int sum[n * n]

;void

init()

for(

int i =

1; i <=

100000

; i++)}

int aa, bb;

int main (

)return0;

}

例如:一段序列(下標從1開始),我們序列a的區間【l,r】加d(把al, al+1,…,ar都加上d)。

d[l] += d;

d[r + 1] -= d;

最後通過差分序列還原原陣列即可求出原序列的值。

例題入口

#include

#include

#include

using

namespace std;

/*9 3 5 5

1 35 3

4 33 7

3 7//求每頭牛的身高的最大可能值是多少。

5 5 5 5 5 5 5 5 5

5 4 5 5 5 5 5 5 5

5 4 5 4 5 5 5 5 5

5 4 5 3 4 4 5 5 5

// 轉化成[a, b] -= 1;

*/const

int n =

10005

;int d[n]

, n, p, h, m, a, b;

intmain()

mp[make_pair

(a,b)]=

true

; d[a +1]

-=1;

d[b]+=

1;}//進行還原a陣列

for(

int i =

1; i <= n; i++

)return0;

}

字首和與差分

數列的字首和 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 ...

字首和與差分

從陣列第乙個開始累加 s i s i 1 a i 求區間 l,r 的和,o 1 複雜度sum s r s l 1 遞推s i j s i j s i 1 j s i j 1 s i 1 j 1 例題 雷射炸彈一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 1000...

字首和與差分

include using namespace std const int n 1010 int a n n sum n n intmain int x1,y1,x2,y2 while q return0 差分就是資料間的差。是原始陣列的相鄰元素之間的差值,有b i a i 1 a i includ...