Submission #1012163

#TimeUsernameProblemLanguageResultExecution timeMemory
1012163mkkkkkkkkXORanges (eJOI19_xoranges)C++14
0 / 100
361 ms13532 KiB
#include <bits/stdc++.h> using namespace std; void build(int node,int l,int r,vector<int>& vec,long long tree[]) { if(l==r) { tree[node]=vec[l]; } else { int m=(l+r)/2; build(node*2+1,l,m,vec,tree); build(node*2+2,m+1,r,vec,tree); tree[node]=min(tree[node*2+1],tree[node*2+2]); } } void upd(int node,int pos,int x,int l,int r,vector<int>& vec,long long tree[]) { if(l==r) { tree[node]=x; return; } else { int m=(l+r)/2; if(pos<=m) { upd(node*2+1,pos,x,l,m,vec,tree); } else { upd(node*2+2,pos,x,m+1,r,vec,tree); } tree[node]=tree[node*2+1]+tree[node*2+2]; } } long long sum(int node,int l, int r,int L,int R,vector<int>& vec,long long tree[]) { if(l>R || r<L) { return 0; } else if(l>=L && r<=R) { return tree[node]; } else { int m=(l+r)/2; return sum(node*2+1,l,m,L,R,vec,tree)+sum(node*2+2,m+1,r,L,R,vec,tree); } } long long tree1[4*500000],tree2[4*500000]; int main() { int n,q; cin>>n>>q; vector<int> vec1,vec2; for(int i=0;i<n;i++) { int x; cin>>x; if(x%2==0) vec1.push_back(x); else vec2.push_back(x); } build(0,0,vec1.size()-1,vec1,tree1); build(0,0,vec2.size()-1,vec2,tree2); for(;q>0;q--) { int x; cin>>x; if(x==1) { int a,b; cin>>a>>b; a--; if(a%2==0) { upd(0,a/2,b,0,vec1.size(),vec1,tree1); } else { upd(0,a/2,b,0,vec2.size(),vec2,tree2); } } else { int a,b; cin>>a>>b; if((b-a+1)%2==0) { cout<<0<<endl; } else { a--; b--; if(a%2==0) { cout<<sum(0,0,vec1.size(),a/2,b/2,vec1,tree1)<<endl; } else { cout<<sum(0,0,vec2.size(),a/2,b/2,vec2,tree2)<<endl; } } } } return 0; }
#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...