Submission #524569

#TimeUsernameProblemLanguageResultExecution timeMemory
524569fadi57XORanges (eJOI19_xoranges)C++14
100 / 100
694 ms15256 KiB
#include<bits/stdc++.h>
using namespace std;
const int mx=2e5+9;
typedef long long ll;
const int mod=1000000007;
const long long inf=1e18+10;
const int SQ=450;
vector<vector<int>>v;
  int seg[4*mx][4];


         void update(int node,int st,int en,int idx,int value){
           if(st==en){
                seg[node][1]=(st%2)*value;
             seg[node][0]=(1-(st%2))*value;
             return;
            }
           int mid=(st+en)/2;

           if(idx>mid){
            update(node*2+1,mid+1,en,idx,value);
           }else{

            update(node*2,st,mid,idx,value);
           }
           seg[node][0]=seg[node*2][0]^seg[node*2+1][0];
           seg[node][1]=seg[node*2][1]^seg[node*2+1][1];
           return ;
         }

         int query(int node,int st,int en,int l,int r){
               if(st>=l&&en<=r){
                   return seg[node][l%2];


               }
               if(st>r||en<l){return 0;}
               int mid=(st+en)/2;
               return query(node*2,st,mid,l,r)^query(node*2+1,mid+1,en,l,r);

        }


    int main(){


        int n,q;
        cin>>n>>q;
        int a[n+5];
        for(int i=1;i<=n;i++){
            cin>>a[i];
            update(1,1,n,i,a[i]);

        }
      //  cout<<seg[2][1];
        while(q--){
            int t,x,y;
            cin>>t>>x>>y;

            if(t==1){
              update(1,1,n,x,y);

            }else{
                int sz=(y-x+1)%2;

                cout<<sz*query(1,1,n,x,y)<<"\n";
             }


        }

     }

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...