Advertisement
Guest User

Untitled

a guest
Jan 24th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define int long long
  6.  
  7. const int N = 1e6;
  8.  
  9. int a[N], d[N], k;
  10.  
  11. void build(int v, int l, int r) {
  12. if (r - l == 1) {
  13. d[v] = a[l];
  14. }
  15. else {
  16. int m = (r + l) / 2;
  17. build(v * 2 + 1, l, m);
  18. build(v * 2 + 2, m, r);
  19. d[v] = d[v * 2 + 1] + d[v * 2 + 2];
  20. }
  21. }
  22.  
  23. void update (int v, int l, int r, int in, int x) {
  24. if (r - l == 1) {
  25. d[v] = x;
  26. }
  27. else {
  28. int m = (r + l) / 2;
  29. if (m <= in) {
  30. update(v * 2 + 2, m, r, in, x);
  31. }
  32. else {
  33. update(v * 2 + 1, l, m, in, x);
  34. }
  35. d[v] = d[v * 2 + 1] + d[v * 2 + 2];
  36. }
  37. }
  38.  
  39. void ans (int v, int l, int r, int vl, int vr) {
  40. if (vl <= l && r <= vr) {
  41. k+= d[v];
  42. }
  43. else {
  44. int m = (r + l) / 2;
  45. if (m <= vl) {
  46. ans(v * 2 + 2, m, r, vl, vr);
  47. }
  48. else {
  49. if (m >= vr) {
  50. ans(v * 2 + 1, l, m, vl, vr);
  51. }
  52. else {
  53. ans(v * 2 + 1, l, m, vl, vr);
  54. ans(v * 2 + 2, m, r, vl, vr);
  55. }
  56. }
  57. }
  58. }
  59.  
  60. signed main() {
  61. int n;
  62. cin >> n;
  63. for (int i = 0; i < n; i++) {
  64. cin >> a[i];
  65. }
  66. build(0, 0, n);
  67. string s;
  68. while (cin >> s) {
  69. if (s == "sum") {
  70. k = 0;
  71. int l, r;
  72. cin >> l >> r;
  73. l--;
  74. ans(0, 0, n, l, r);
  75. cout << k << "\n";
  76. }
  77. else {
  78. int x, in;
  79. cin >> in >> x;
  80. in--;
  81. update(0, 0, n, in, x);
  82. }
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement