Submission #268077

#TimeUsernameProblemLanguageResultExecution timeMemory
268077VusetOrucovXORanges (eJOI19_xoranges)C++17
100 / 100
641 ms16248 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> #define black_tree tree<ll,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> #define gp __gnu_pbds #define INF 1000000000 #define MOD 1000000007 #define MAX 200001 #define endl '\n' #define ll long long #define ld long double #define lli long long int #define ull unsigned long long #define ulli unsigned long long int #define pb push_back #define pf push_front #define ook order_of_key #define fbo find_by_order #define np next_permutation #define mp make_pair #define eb emplace_back #define me max_element #define lb lower_bound #define ub upper_bound #define bs binary_search #define ff first #define ss second using namespace std; using namespace gp; ll n,q,k,u,v,a[MAX],dp0[4*MAX],dp1[4*MAX]; void buildTree(ll v,ll l,ll r){ if(l==r){ if(l%2==1){ dp0[v]=a[l]; } else{ dp1[v]=a[l]; } return; } ll m=(l+r)/2; buildTree(2*v,l,m); buildTree(2*v+1,m+1,r); dp0[v]=dp0[2*v]^dp0[2*v+1]; dp1[v]=dp1[2*v]^dp1[2*v+1]; } ll get(ll v,ll l,ll r,ll i1,ll i2,ll t){ if(r<i1 || l>i2){ return 0; } else if(l>=i1 && r<=i2){ if(t==1){ return dp0[v]; } else{ return dp1[v]; } } ll m=(l+r)/2; ll ans=get(2*v,l,m,i1,min(m,i2),t); ll sum=get(2*v+1,m+1,r,max(m+1,i1),i2,t); return ans^sum; } void updateTree(ll v,ll l,ll r,ll i,ll value){ if(l==r){ if(i%2==1){ dp0[v]=value; } else{ dp1[v]=value; } return; } ll m=(l+r)/2; if(i<=m){ updateTree(2*v,l,m,i,value); } else{ updateTree(2*v+1,m+1,r,i,value); } dp0[v]=dp0[2*v]^dp0[2*v+1]; dp1[v]=dp1[2*v]^dp1[2*v+1]; } int main(){ ios::sync_with_stdio(true); cin.tie(0); cout.tie(0); cin>>n>>q; for(int i=1;i<=n;i++){ cin>>a[i]; } buildTree(1,1,n); while(q--){ cin>>k>>u>>v; if(k==1){ updateTree(1,1,n,u,v); } else{ if(u%2!=v%2){ cout<<"0\n"; } else{ cout<<get(1,1,n,u,v,u%2)<<endl; } } } }
#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...