Advertisement
fariahasan

update and sum query...

Mar 28th, 2020
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3. Welcome to GDB Online.
  4. GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby,
  5. C#, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS, JS
  6. Code, Compile, Run and Debug online from anywhere in world.
  7.  
  8. *******************************************************************************/
  9. #include <iostream>
  10. using namespace std;
  11. #define mx 100001
  12. int arr[mx];
  13. int tree[mx * 3];
  14. void init(int node, int b, int e)
  15. {
  16. if (b == e) {
  17. tree[node] = arr[b];
  18. return;
  19. }
  20. int Left = node * 2;
  21. int Right = node * 2 + 1;
  22. int mid = (b + e) / 2;
  23. init(Left, b, mid);
  24. init(Right, mid + 1, e);
  25. tree[node] = tree[Left] + tree[Right];
  26. }
  27. int query(int node, int b, int e, int i, int j)
  28. {
  29. if (i > e || j < b)
  30. return 0;
  31. if (b >= i && e <= j)
  32. return tree[node];
  33. int Left = node * 2;
  34. int Right = node * 2 + 1;
  35. int mid = (b + e) / 2;
  36. int p1 = query(Left, b, mid, i, j);
  37. int p2 = query(Right, mid + 1, e, i, j);
  38. return p1 + p2;
  39. }
  40. void update(int node, int b, int e, int i, int newvalue)
  41. {
  42. if (i > e || i < b)
  43. return;
  44. if (b >= i && e <= i) {
  45. tree[node] = newvalue;
  46. return;
  47. }
  48. int Left = node * 2;
  49. int Right = node * 2 + 1;
  50. int mid = (b + e) / 2;
  51. update(Left, b, mid, i, newvalue);
  52. update(Right, mid + 1, e, i, newvalue);
  53. tree[node] = tree[Left] + tree[Right];
  54. }
  55. int main()
  56. {
  57.  
  58. int n,i,j,k,l,p;
  59. cin >> n;
  60. for(i=1;i<=n;i++)
  61. cin>> arr[i];
  62. init(1, 1, n);
  63. cin>>j>>k;
  64. cout << query(1, 1, n, j, k) << endl;
  65. cin>>l>>p;
  66. update(1, 1, n, l, p);
  67.  
  68. cout << query(1, 1, n, j, k) << endl;
  69. return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement