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