Advertisement
mehedi1

RSQ Basic.cpp

Jul 28th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define mxn 500005
  4. #define ll long long
  5. int A[mxn];
  6. int st[mxn*4];
  7.  
  8. void build(int v, int l, int r) {
  9.     if(l==r) {
  10.         st[v] = A[l];
  11.     } else {
  12.         int m = (l+r)/2;
  13.         build(v*2, l, m);
  14.         build(v*2+1, m+1, r);
  15.         st[v] = st[v*2] + st[v*2+1];
  16.     }
  17. }
  18. void update(int v, int l, int r, int i, int val) {
  19.     if(l==r) {
  20.         st[v] = val;
  21.         return;
  22.     }
  23.     int m = (l+r)/2;
  24.     if(i<=m) update(v*2, l, m, i, val);
  25.     else update(v*2+1, m+1, r, i, val);
  26.     st[v] = st[v*2] + st[v*2+1];
  27. }
  28. int query(int v, int l, int r, int i, int j) {
  29.     if(l>=i && r<=j) return st[v];
  30.     int m = (l+r)/2;
  31.     if(j<=m) return query(v*2, l, m, i, j);
  32.     else if(i>m) return query(v*2+1, m+1, r, i, j);
  33.     else return query(v*2, l, m, i, m) + query(v*2+1, m+1, r, m+1, j);
  34. }
  35. int main() {
  36.     int a,b,n,q;
  37.     char str[2];
  38.     scanf("%d %d",&n,&q);
  39.     for(int i=1;i<=n;++i) {
  40.         scanf("%d",&A[i]);
  41.     }
  42.     build(1,1,n);
  43.  
  44.     while(q--) {
  45.         scanf("%s %d %d",str, &a, &b);
  46.         if(str[0]=='=') update(1,1,n,a,b);
  47.         else {
  48.             int x = query(1,1,n,a,b);
  49.             printf("%d\n", x);
  50.         }
  51.     }
  52.     return 0;
  53. }
  54.  
  55. /*
  56. st 2-B
  57. 138 ms
  58.  
  59. 3 3
  60. 1 2 3
  61. ? 1 3
  62. = 3 2
  63. ? 1 3
  64. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement