字首和與差分

2021-10-14 07:48:12 字數 592 閱讀 2468

簡單明瞭的區間有限次操作,區間加減上的親密兩兄弟。

字首和書面意思就是字首相加的和,如乙個序列為,其字首和的計算為每一項為前n項相加的和第一項的值就是本身,第二項的值是第一項加第二的和也就是1+3等於4,以此類推,我們便可以得到原陣列的字首陣列就是。

那麼我們知道了字首和的定義,他到底能做些什麼事情呢?

舉乙個最簡單的栗子,我們有n此操作,每次都要求l到r區間內的和,那麼對於還沒有了解到字首和的我們會怎麼做呢?

首先有n此操作,乙個迴圈從1到n,l到r的區間和,第二個迴圈從l到r進行累加。n此操作的時間複雜度就是o(n * m);

有了字首和,我們可以進行的操作就是用r下標表示的字首和陣列數值減去l下標的字首和陣列數值,就得到了區間和,那麼也就是求區間和的時間複雜度就是o(1);

差分陣列 是計算陣列的差,其表示方式就是用陣列後一元素來減去陣列的前乙個元素所得到的值放入陣列,這個過程就是差分。

拿上乙個的陣列來說原陣列是,進行差分後的結果就是

同樣我們進行n此操作使l到r區間的數進行+x運算,雙重for是最經典的做法,有了差分我們就可以在差分陣列中的第l個元素進行+x,使r+1的位置元素進行減一,使o(n * m)的時間複雜度變為了o(1);

字首和與差分

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