Skip to content

Commit 42de6bf

Browse files
author
DASHAN JOT SINGH
authored
fenwick tree with range updates
1 parent 633aa8a commit 42de6bf

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
#define ll long long int
5+
#define re1(x) scanf("%lld",&x)
6+
#define re2(x,y) scanf("%lld%lld",&x,&y)
7+
#define re3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z)
8+
#define pr(x) printf("%lld\n",x);
9+
#define pb push_back
10+
#define mp make_pair
11+
ll n,u,q;
12+
ll arr[10010];
13+
ll BIT_1[10020];
14+
ll BIT_2[10020];
15+
void update1(ll index,ll val){
16+
index+=1;
17+
while(index<=n){
18+
BIT_1[index]+=val;
19+
index+=(index&(-index));
20+
//go to next element to be updated
21+
}
22+
}
23+
ll query1(ll index){
24+
index+=1;
25+
// as bittree has one extra element
26+
ll sum=0;
27+
while(index>0){
28+
sum+=BIT_1[index];
29+
index-=(index&(-index));
30+
}
31+
return sum;
32+
}
33+
void update2(ll index,ll val){
34+
index+=1;
35+
while(index<=n){
36+
BIT_2[index]+=val;
37+
index+=(index&(-index));
38+
//go to next element to be updated
39+
}
40+
}
41+
ll query2(ll index){
42+
index+=1;
43+
// as bittree has one extra element
44+
ll sum=0;
45+
while(index>0){
46+
sum+=BIT_2[index];
47+
index-=(index&(-index));
48+
}
49+
return sum;
50+
}
51+
void update_r(ll l,ll r,ll val){
52+
update1(l,val);
53+
update1(r+1,-val);
54+
update2(l,val*(l-1));
55+
update2(r+1,-val*r);
56+
}
57+
ll sum(ll x){
58+
return ((query1(x)*x)-query2(x));
59+
}
60+
ll range_sum(ll l,ll r){
61+
return sum(r)-sum(l-1);
62+
}
63+
int main(){
64+
ll t;
65+
re1(t);
66+
while(t--){
67+
re2(n,u);
68+
for(ll i=0;i<n;i+=1){
69+
arr[i]=0;
70+
}
71+
for(ll i=0;i<=n;i+=1){
72+
BIT_1[i]=0;
73+
BIT_2[i]=0;
74+
}
75+
for(ll i=0;i<u;i+=1){
76+
ll l,r,val;
77+
re3(l,r,val);
78+
update_r(l,r,val);
79+
}
80+
re1(q);
81+
for(ll i=0;i<q;i+=1){
82+
ll xx;
83+
re1(xx);
84+
//xx-=1;
85+
ll yy=range_sum(0,xx-1);
86+
ll xx1=range_sum(0,xx);
87+
ll ans=xx1-yy;
88+
pr(ans);
89+
}
90+
}
91+
return 0;
92+
}

0 commit comments

Comments
 (0)