Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. //#include "../../utils/utils.cpp"
  5.  
  6. using namespace std;
  7.  
  8. int check(int num){
  9.   return (num == 0) ? 1 : 0;
  10. }
  11.  
  12. void update(int* st, int n, int ss,int se,int rs,int re,int si,int add){
  13.   cout << " ss: " << ss << " se: " << se << " rs: " << rs << " re: " << re << " si: " << si << endl;
  14.  
  15.   //check if queryrange inside segment
  16.   if(ss>se || rs>se || re<ss) return;
  17.  
  18.   //check if leaf node
  19.   if(ss == se){
  20.     switch(add%3){
  21.     case 1:
  22.       st[si] += add%3;
  23.       break;
  24.     case 2:
  25.       st[si] += add%3;
  26.       break;
  27.     }
  28.     st[si] = st[si]%3;
  29.     return;
  30.   }
  31.  
  32.   int mid = floor((ss+se)/2);
  33.   update(st, n, ss, mid, rs, re, si*2+1, add);
  34.   update(st, n, mid+1, se, rs, re, si*2+2, add);
  35.  
  36.  
  37.   //check if next node is not a leaf node
  38.   if(si*2 < n) st[si] =st[si*2+1] + st[si*2+2];
  39.   else if(si*2+1 > n) st[si] = check(st[si*2+1]) + check(st[si*2+2]);
  40.  
  41. }
  42.  
  43. int query(int* st,int ss,int se,int rs,int re,int si){
  44.   if(ss>se || rs<ss || re>se) return 0;
  45.   else if(ss>=rs && se<=re) return st[si];
  46.   else{
  47.     int mid = (ss+se)/2;
  48.     return  query(st, ss, mid, rs, re, si*2+1) + query(st, mid+1, se, rs, re, si*2+2);
  49.   }
  50. }
  51.  
  52. int main(){
  53.   int n, q;
  54.   cin >> n >> q;
  55.   int lazy[2*n] = {0};
  56.   int tree[2*n] = {0};
  57.   for(int i=0; i<q; i++){
  58.     int c, a, b;
  59.     cin >> c >> a >> b;
  60.     if(c == 0){
  61.       update(tree,n, 0, n-1, a, b, 0, 1);
  62.       //printArray(tree, n);
  63.     }else if(c == 1){
  64.       cout << query(tree, 0, n-1, a, b, 0) << endl;
  65.     }
  66.     for (int i=0; i<n; i++) cout << tree[i] << " ";
  67.     cout << endl;
  68.     for(int i=n; i<n*2; i++) cout << tree[i] << " ";
  69.     cout << endl;
  70.   }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement