yungyao

區間XOR單點修改線段樹

Nov 11th, 2021 (edited)
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. struct segmenttree{
  2.     int val[maxn*8];
  3.  
  4.     void maketree(int cur,int LB,int RB){
  5.         if (LB == RB) val[cur] = arr[LB];
  6.         else{
  7.             maketree(cur*2,LB,mid);
  8.             maketree(cur*2+1,mid+1,RB);
  9.             val[cur] = val[cur*2] ^ val[cur*2+1];
  10.         }
  11.     }
  12.  
  13.     int query(int l,int r,int cur,int LB,int RB){
  14.         if (l == LB and r == RB) return val[cur];
  15.         else if (r <= mid) return query(l,r,cur*2,LB,mid);
  16.         else if (l > mid) return query(l,r,cur*2+1,mid+1,RB);
  17.         else return query(l,mid,cur*2,LB,mid) ^ query(mid+1,r,cur*2+1,mid+1,RB);
  18.     }
  19.  
  20.     void mdf(int t,int v,int cur,int LB,int RB){
  21.         if (LB == RB){
  22.             val[cur] = v;
  23.         }
  24.         else{
  25.             if (t <= mid) mdf(t,v,cur*2,LB,mid);
  26.             else mdf(t,v,cur*2+1,mid+1,RB);
  27.             val[cur] = val[cur*2] ^ val[cur*2+1];
  28.         }
  29.     }
  30. };
Add Comment
Please, Sign In to add comment