字首和 差分

2021-10-25 15:43:05 字數 1053 閱讀 5674

字首和:通常使用字首和來解決這樣的問題,給定一組陣列,給定兩個數l,r,讓求這個陣列裡面從[l,r]裡的數的和,可能你說遍歷也能解決,但是當資料量很大時,就會直接tle,於是這時候我們的字首和就派上用場了,使用字首和我們可以將時間複雜度縮短至o(m+n),接下來是求字首和的過程:

ans=b[r]-b[l-1]

#include

#include

using

namespace std;

const

int n=

1e6+9;

int a[n]

;//定義原陣列

int b[n]

;//定義字首和陣列

intmain()

return0;

}

差分:差分就是先有乙個整數序列,接下來輸入m個操作,每個操作包含三個整數l, r, c,表示將序列中[l, r]之間的每個數加上c。

最後輸出進行完所有操作後的序列。

加+: b[x]=b[x]+z;

b[y+1]=b[y+1]-z;

減-: b[x]=b[x]-z;

b[y+1]=b[y+1]+z;

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int n=

1e5+9;

int a[n]

;//定義原陣列

int b[n]

;//定義差分陣列

intmain()

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

字首和 差分

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