Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- using namespace std;
- const int maxn=200005;
- int n,a[maxn];
- long long segment_tree[3*maxn];
- long long merge_nodes(long long A, long long B){
- return A^B;
- }
- void build_tree(int L=0,int R=n-1,int node=1){
- if(L==R){
- segment_tree[node]=a[L];
- }else{
- int middle=(L+R)/2;
- build_tree(L,middle,2*node);
- build_tree(middle+1,R,2*node+1);
- segment_tree[node]=merge_nodes(segment_tree[2*node],segment_tree[2*node+1]);
- }
- }
- long long query(int i,int j,int L=0,int R=n-1,int node=1){
- if(R<i || j<L){
- return 0;
- }
- if(i<=L && R<=j){
- return segment_tree[node];
- }
- int middle=(L+R)/2;
- long long left=query(i,j, L, middle,2*node);
- long long right=query(i,j,middle + 1, R,2*node+1);
- return merge_nodes(left,right);
- }
- int main()
- {
- int q;
- cin>>n>>q;
- for(int i = 0;i<n;i++){
- cin>>a[i];
- }
- build_tree();
- for(int i=0;i<q;i++){
- int A,B;
- cin>>A>>B;
- cout<<query(A-1,B-1)<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment