Aprendi Fenwick Tree! (Binary Indexed Tree)

This commit is contained in:
Daneck1988 2024-09-25 17:57:23 -03:00
parent e6633ede97
commit 8d6a6e3d61

View File

@ -0,0 +1,50 @@
#include <bits/stdc++.h>
using namespace std;
vector<int> bit, vetor_100pct_original;
void update_bit(int pos, int x){
int pracsum = -vetor_100pct_original[pos-1];
vetor_100pct_original[pos-1] = x;
for(; pos <= bit.size(); pos += (pos&-pos)){
bit[pos] += pracsum + x;
}
}
int sumrange_bit(int pos){
int answ = 0;
for(; pos > 0; pos -= (pos&-pos)){
answ += bit[pos];
}
return answ;
}
int main(){
ios::sync_with_stdio(false);
int n,q, x, t,k,p;
cin >> n >> q;
bit.assign(n+1,0);
vetor_100pct_original.assign(n,0);
for(int i = 1; i <= n; i++){
cin >> x;
bit[i] += x;
vetor_100pct_original[i-1] = x;
for(int j = i+(i&-i); j <= n; j += (j&-j)){
bit[j] += x;
}
}
while(q--){
cin >> t >> k;
if(t == 0){
cin >> p;
update_bit(k, p);
}else{
cout << sumrange_bit(k) << '\n';
}
}
return 0;
}