學習筆記 字首和與差分

2021-10-18 11:54:45 字數 1310 閱讀 1584

1、字首和(一維,二維)

應用:一維:快速求一段連續子串行的和

二維:快速求乙個子矩陣的和

//一維字首和

const

int n =

1e5+5;

int n,q,a[n]

,s[n]

;//a是原陣列,s是字首和陣列

intmain()

return0;

}

//二維字首和

const

int n =

1e3+5;

int n,m,q,a[n]

[n],s[n]

[n];

intmain()

while

(q--

)//q次詢問

return0;

}

2、差分(一維,二維)

應用:一維:對於陣列中[l,r]快速進行修改操作

二維:對於子矩陣快速進行修改操作

//一維差分

const

int n =

1e5+5;

int n,q,a[n]

,diff[n]

;//diff差分陣列

intmain()

//由差分陣列求原陣列

for(

int i=

1;i<=n;i++

) a[i]

=diff[i]

+a[i-1]

;for

(int i=

1;i<=n;i++

) cout<<<

" ";cout

}

//二維差分

const

int n =

1e3+5;

int n,m,q,a[n]

[n],diff[n]

[n];

intmain()

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++

)//由差分陣列求原陣列

a[i]

[j]=a[i]

[j-1

]+a[i-1]

[j]-a[i-1]

[j-1

]+diff[i]

[j];

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 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 i...