關於樹狀陣列的幾點總結

2022-03-20 08:16:35 字數 1193 閱讀 3604

零、樹狀陣列的基本概念

1.概念:

2.實現原理:

3.特性:

1.概念

這是樹狀陣列最基本的應用,也就是支援單點修改區間查詢(時間複雜度均為

2.實現原理

3.具體實現:

不停獲取i的二進位制表示中的最後一位1所代表的值(將這個值設為b)

在操作過程中(在迴圈中給i增加b之前),向c陣列中下標為i的地方增加x

進行i+b這個操作(這使得i的值在最壞情況下也會在

次達到(估算))

判斷i的值是否到n

準備進行兩次求字首和的操作(假設要獲取區間a[i...j]的總值,則計算

即可,也就是求兩次字首和)

(單次求字首和操作過程與單點查詢恰好相反)(下面只寫求單次字首和的過程,具體可看**.)

初始化ans=0,準備用於儲存查詢結果

不停獲取i的二進位制表示中的最後一位1所代表的值(將這個值設為b)

在操作過程中(在迴圈中給i減少b之前),向ans增加x

進行這個操作(這使得i的值在最壞情況下也會在

次達到(估算))

判斷i的值是否到0

#include#includeusing namespace std;

int n,c[500010];

int lowbit(int x)

void add(int x,int k)

int sum(int x,int y)

for(x--;x;x-=lowbit(x))

return ans;

}int main()

for(int i=1;i<=m;i++)else if(ta==2)

long long query(int x)

return ans;

}int main()

for(int i=1;i<=m;i++)else if(ta==2)

}return 0;

}

關於樹狀陣列

身為蒟蒻的我 終於學會了 樹狀陣列 但因為自己還是太蒟蒻 還是糊里糊塗的 所以寫個部落格理理思路 樹狀陣列的數學模型 樹狀陣列的劃分依據的原理是任何正整數都可以表示為2的冪相加的形式 如13 2 3 2 2 2 1 進而可以利用這一特性來進行區間求和 設想一下現在乙個序列 長度為n 現在要進行區間求...

關於樹狀陣列

樹狀陣列 binary indexed tree b.i.t fenwick tree 是乙個查詢和修改複雜度都為log n 的資料結構。主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值 經過簡單修改可以在log n 的複雜度下進行範圍修改,但是這時只能查詢其中乙個元素的值 如果...

關於樹狀陣列

樹狀陣列的核心在於對一段區間的修改和查詢,巧妙地把陣列用一顆樹表示,從而降低了對陣列的修改和查詢的複雜度。首先引入lowbit int lowbit x 如 x 1 1 0000 0001 1111 1111 1 x 6 6 6 0000 0110 1111 1010 2 總結一下就是 求出某個數二...