洛谷模板,樹狀陣列二 差分

2022-03-11 14:12:22 字數 738 閱讀 5529

先介紹下差分:

設陣列a=,那麼差分陣列b=

也就是說b[i]=a[i]-a[i-1];(a[0]=0;),那麼a[i]=b[1]+....+b[i];(這個很好證的)。

假如區間[2,4]都加上2的話

a陣列變為a=,b陣列變為b=;

發現了沒有,b陣列只有b[2]和b[5]變了,因為區間[2,4]是同時加上2的,所以在區間內b[i]-b[i-1]是不變的.

所以對區間[x,y]進行修改,只用修改b[x]與b[y+1]:

b[x]=b[x]+k;b[y+1]=b[y+1]-k;

#include #include 

#include

#include

#include

#include

using

namespace

std;

intn,m;

int input[500010

];

int tree[500100

];

int lowbit(int

x)

void add(int x,int

k)

}int search(int

x)

return

ans;

}intmain()

if(a==2

)

}}

洛谷 模板 樹狀陣列

如題,已知乙個數列,你需要進行下面兩種操作 1.將某乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3或4個整數,表示乙個操作,具體如下 操作...

樹狀陣列模板 洛谷3374

第一類 題目描述 如題,已知乙個數列,你需要進行下面兩種操作 1.將某乙個數加上x 2.求出某區間每乙個數的和 輸入輸出格式 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3個整數,...

洛谷 3374 模板 樹狀陣列 1

題目描述 如題,已知乙個數列,你需要進行下面兩種操作 1.將某乙個數加上x 2.求出某區間每乙個數的和 輸入輸出格式 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3個整數,表示乙個...