From 8d6a6e3d61f76e11dee6f4f6656bf4da0f13abd3 Mon Sep 17 00:00:00 2001 From: Daneck1988 Date: Wed, 25 Sep 2024 17:57:23 -0300 Subject: [PATCH] Aprendi Fenwick Tree! (Binary Indexed Tree) --- Problems/NepsAcademy/neps_43.cpp | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Problems/NepsAcademy/neps_43.cpp diff --git a/Problems/NepsAcademy/neps_43.cpp b/Problems/NepsAcademy/neps_43.cpp new file mode 100644 index 0000000..a6cf49e --- /dev/null +++ b/Problems/NepsAcademy/neps_43.cpp @@ -0,0 +1,50 @@ +#include + +using namespace std; +vector 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; +} \ No newline at end of file