From 909fb39c1d66876e355e7aa8b20cc405561e16aa Mon Sep 17 00:00:00 2001 From: Hizenberg Date: Sun, 19 May 2024 11:01:45 +0530 Subject: [PATCH] Fenwick Tree snippet --- Range Queries/FenwickTree.cpp | 83 +++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Range Queries/FenwickTree.cpp diff --git a/Range Queries/FenwickTree.cpp b/Range Queries/FenwickTree.cpp new file mode 100644 index 0000000..c9a76e9 --- /dev/null +++ b/Range Queries/FenwickTree.cpp @@ -0,0 +1,83 @@ +#include + +using namespace std; + + + +class Fenwick_Tree{ + +public: + + // 1 based indexing... + vector tree; + int sz; + + void init(int n, const vector& arr){ + tree.resize(n+1,0); + + this->sz = n; + + for(int i = 1 ; i <= sz ; i++ ){ + + update(i, arr[i-1]); + } + } + + int sum(int k){ + int s = 0; + + while(k >= 1){ + + s += tree[k]; + + k -= k & -k; + } + + return s; + } + + void update(int k, int val){ + + while( k <= sz ){ + tree[k] += val; + + k += k & -k; + } + } + + void print(){ + + for(int i = 1 ; i <= sz ; i++ ){ + cout << tree[i] << ' '; + } + cout << '\n'; + } + + +}; + + +int main(){ + + Fenwick_Tree fn; + + vector arr = {3,1,2,0,1,3,5,7,10,44,0}; + + fn.init( (int)arr.size(), arr); + + + fn.print(); + + int sum = fn.sum(10) - fn.sum(7); + + cout << sum << '\n'; + + fn.update(10,1); + + sum = fn.sum(10) - fn.sum(7); + + cout << sum << '\n'; + + + return 0; +} \ No newline at end of file