Adrita

ds lab 9 task 1

Jul 28th, 2020
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,cnt=0;
  4. int tree[2000];
  5. int ar[1000];
  6. void init(int node,int b,int e)
  7. {
  8. if(b==e)
  9. {
  10. tree[node]=ar[b];
  11. cnt=max(cnt,node);
  12. return;
  13. }
  14. int left=node*2;
  15. int right=(node*2)+1;
  16. int mid=(b+e)/2;
  17. init(left,b,mid);
  18. init(right,mid+1,e);
  19. tree[node]=tree[left]+tree[right];
  20. cnt=max(cnt,node);
  21. }
  22. int query_sum(int node,int b,int e,int i,int j)
  23. {
  24. if(i>e||j<b)
  25. return 0;
  26. if(b>=i&&e<=j)
  27. return tree[node];
  28. int left=node*2;
  29. int right=(node*2)+1;
  30. int mid=(b+e)/2;
  31. int p1=query_sum(left,b,mid,i,j);
  32. int p2=query_sum(right,mid+1,e,i,j);
  33. return p1+p2;
  34. }
  35. int update(int node,int b,int e,int i,int newVal)
  36. {
  37. if(i>e||i<b)
  38. return 0;
  39. if(b==i&&e==i)
  40. {
  41. tree[node]=newVal;
  42. return 0;
  43. }
  44. int left=node*2;
  45. int right=(node*2)+1;
  46. int mid=(b+e)/2;
  47. update(left,b,mid,i,newVal);
  48. update(right,mid+1,e,i,newVal);
  49. tree[node]=tree[left]+tree[right];
  50. }
  51. void printtree()
  52. {
  53. int i;
  54. cout<<"The Segment Tree Array is : ";
  55. for(i=1;i<=cnt;i++)
  56. cout<<tree[i]<<" ";
  57. cout<<endl;
  58. }
  59. int main()
  60. {
  61. int i;
  62. cout<<"Number of elements"<<endl;
  63. cin>>n;
  64. for(i=1;i<=n;i++)
  65. cin>>ar[i];
  66. init(1,1,n);
  67. printtree();
  68. cout<<"Sum of (2..6) : "<<query_sum(1,1,n,2,6)<<endl;
  69. update(1,1,n,3,43);
  70. cout<<"After Update"<<endl;
  71. printtree();
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment