Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAXN 100000
  3.  
  4. using namespace std;
  5. long long n, t[4 * MAXN];
  6.  
  7. void build (long long a[], long long v, long long tl, long long tr)
  8. {
  9. if (tl == tr)
  10. t[v] = a[tl];
  11. else
  12. {
  13. long long tm = (tl + tr) / 2;
  14. build (a, v * 2, tl, tm);
  15. build (a, v * 2 + 1, tm + 1, tr);
  16. t[v] = t[v * 2] + t[v * 2 + 1];
  17. }
  18. }
  19.  
  20. long long sum (long long v, long long tl, long long tr, long long l, long long r)
  21. {
  22. if (l > r)
  23. return 0;
  24.  
  25. if (l == tl && r == tr)
  26. return t[v];
  27.  
  28. long long tm = (tl + tr) / 2;
  29. return sum (v * 2, tl, tm, l, min(r, tm)) + sum (v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
  30. }
  31.  
  32. void update (long long v, long long tl, long long tr, long long pos, long long new_val)
  33. {
  34. if (tl == tr)
  35. t[v] = new_val;
  36. else
  37. {
  38. long long tm = (tl + tr) / 2;
  39. if (pos <= tm)
  40. update (v * 2, tl, tm, pos, new_val);
  41. else
  42. update (v * 2 + 1, tm + 1, tr, pos, new_val);
  43. t[v] = t[v * 2] + t[v * 2 + 1];
  44. }
  45. }
  46.  
  47. int main()
  48. {
  49. long long n;
  50. scanf("%lld", &n);
  51. long long a[n + 1];
  52. for (int i = 1; i <= n; ++i)
  53. scanf("%lld", &a[i]);
  54. build(a, 1, 1, n);
  55.  
  56. long long m;
  57. scanf("%lld", &m);
  58.  
  59. for (int i = 0; i < m; ++i)
  60. {
  61. char c;
  62. scanf("\n%c", &c);
  63.  
  64. if (c == 's')
  65. {
  66. long long l, r;
  67. scanf("%lld %lld", &l, &r);
  68. cout << sum (1, 1, n, l, r) << ' ';
  69. }
  70. else
  71. {
  72. long long l, r;
  73. scanf("%lld %lld", &l, &r);
  74. update(1, 1, n, l, r);
  75. }
  76. }
  77.  
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement