字首和 差分總結

2021-10-02 10:37:37 字數 717 閱讀 9778

差分問題總結

一維例題:

輸入乙個長度為n的整數序列。

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

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

設那麼求a陣列時,就可以利用b陣列的字首和來計算

在a2-a4區間內每個數加x,就相當於b2加上2,而b3不變,b4也不變,b5要減去2,也就是

在l r區間內加x,那麼就b[l]+=x b[r+1]-=x

那麼上面的題就可以

#include#define rep(i,a,b) for(int i=a;i<=b;i++)

#define ll long long

using namespace std;

const int maxn=200000+66;

int a[maxn];

int b[maxn];

void add(int l,int r,int x)

int main()

while(m--)

rep(i,1,n)

int main()

}while(q--)

rep(i,1,n)

ll ans=0;

rep(i,1,n)

cout<}}

字首和 差分

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