Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int n,cnt=0;
- int tree[2000];
- int ar[1000];
- void init(int node,int b,int e)
- {
- if(b==e)
- {
- tree[node]=ar[b];
- cnt=max(cnt,node);
- return;
- }
- int left=node*2;
- int right=(node*2)+1;
- int mid=(b+e)/2;
- init(left,b,mid);
- init(right,mid+1,e);
- tree[node]=tree[left]+tree[right];
- cnt=max(cnt,node);
- }
- int query_sum(int node,int b,int e,int i,int j)
- {
- if(i>e||j<b)
- return 0;
- if(b>=i&&e<=j)
- return tree[node];
- int left=node*2;
- int right=(node*2)+1;
- int mid=(b+e)/2;
- int p1=query_sum(left,b,mid,i,j);
- int p2=query_sum(right,mid+1,e,i,j);
- return p1+p2;
- }
- int update(int node,int b,int e,int i,int newVal)
- {
- if(i>e||i<b)
- return 0;
- if(b==i&&e==i)
- {
- tree[node]=newVal;
- return 0;
- }
- int left=node*2;
- int right=(node*2)+1;
- int mid=(b+e)/2;
- update(left,b,mid,i,newVal);
- update(right,mid+1,e,i,newVal);
- tree[node]=tree[left]+tree[right];
- }
- void printtree()
- {
- int i;
- cout<<"The Segment Tree Array is : ";
- for(i=1;i<=cnt;i++)
- cout<<tree[i]<<" ";
- cout<<endl;
- }
- int main()
- {
- int i;
- cout<<"Number of elements"<<endl;
- cin>>n;
- for(i=1;i<=n;i++)
- cin>>ar[i];
- init(1,1,n);
- printtree();
- cout<<"Sum of (2..6) : "<<query_sum(1,1,n,2,6)<<endl;
- update(1,1,n,3,43);
- cout<<"After Update"<<endl;
- printtree();
- }
Advertisement
Add Comment
Please, Sign In to add comment