Josif_tepe

Untitled

Oct 5th, 2025
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. using namespace std;
  4. const int maxn=200005;
  5. int n,a[maxn];
  6.  
  7. long long segment_tree[3*maxn];
  8.  
  9. long long merge_nodes(long long A, long long B){
  10.   return A^B;
  11. }
  12.  
  13. void build_tree(int L=0,int R=n-1,int node=1){
  14.   if(L==R){
  15.     segment_tree[node]=a[L];
  16.   }else{
  17.     int middle=(L+R)/2;
  18.     build_tree(L,middle,2*node);
  19.     build_tree(middle+1,R,2*node+1);
  20.     segment_tree[node]=merge_nodes(segment_tree[2*node],segment_tree[2*node+1]);
  21.   }
  22. }
  23.  
  24. long long query(int i,int j,int L=0,int R=n-1,int node=1){
  25.   if(R<i || j<L){
  26.     return 0;
  27.   }
  28.   if(i<=L && R<=j){
  29.     return segment_tree[node];
  30.   }
  31.   int middle=(L+R)/2;
  32.   long long left=query(i,j, L, middle,2*node);
  33.   long long right=query(i,j,middle + 1, R,2*node+1);
  34.   return merge_nodes(left,right);
  35. }
  36.  
  37. int main()
  38. {
  39.     int q;
  40.     cin>>n>>q;
  41.     for(int i = 0;i<n;i++){
  42.         cin>>a[i];
  43.     }
  44.     build_tree();
  45.  
  46.     for(int i=0;i<q;i++){
  47.         int A,B;
  48.         cin>>A>>B;
  49.         cout<<query(A-1,B-1)<<endl;
  50.     }
  51.     return 0;
  52. }
  53.  
Advertisement
Add Comment
Please, Sign In to add comment