summaryrefslogtreecommitdiff
path: root/datastructures/fenwickTree.cpp
diff options
context:
space:
mode:
authormzuenni <michi.zuendorf@gmail.com>2022-06-27 17:19:28 +0200
committermzuenni <michi.zuendorf@gmail.com>2022-06-27 17:19:28 +0200
commit5ab8a5088b729a9953b8dff1b2a985dc8fb2098b (patch)
treeed40d6936c0e9eee40ba62751cbf99ecddbaddc2 /datastructures/fenwickTree.cpp
parentadabbad9c51cf7cd3874bfde8eac1fbcf84fec10 (diff)
updated tcr
Diffstat (limited to 'datastructures/fenwickTree.cpp')
-rw-r--r--datastructures/fenwickTree.cpp24
1 files changed, 9 insertions, 15 deletions
diff --git a/datastructures/fenwickTree.cpp b/datastructures/fenwickTree.cpp
index 86b1138..cac3cf8 100644
--- a/datastructures/fenwickTree.cpp
+++ b/datastructures/fenwickTree.cpp
@@ -1,21 +1,15 @@
-vector<int> FT; // Fenwick-Tree
-int n;
+vector<ll> tree;
-// Addiert val zum Element an Index i. O(log(n)).
-void updateFT(int i, int val) {
- i++; while(i <= n) { FT[i] += val; i += (i & (-i)); }
+void update(int i, ll val) {
+ for (i++; i < sz(tree); i += (i & (-i))) tree[i] += val;
}
-// Baut Baum auf. O(n*log(n)).
-void buildFenwickTree(vector<int>& a) {
- n = a.size();
- FT.assign(n+1,0);
- for(int i = 0; i < n; i++) updateFT(i,a[i]);
+void init(int n) {
+ tree.assign(n + 1,0);
}
-// Präfix-Summe über das Intervall [0..i]. O(log(n)).
-int prefix_sum(int i) {
- int sum = 0; i++;
- while(i > 0) { sum += FT[i]; i -= (i & (-i)); }
- return sum;
+ll prefix_sum(int i) {
+ ll sum = 0;
+ for (i++; i > 0; i -= (i & (-i))) sum += tree[i];
+ return sum;
}