Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int evencount[400004];
- bool A[100001];
- int num;
- int buildCnt=0, updateCnt=0, queryCnt=0;
- void assert_re(bool q) {
- while (!q) {
- throw 1;
- }
- }
- void assert_tle(bool q) {
- // intinity loop
- while (!q);
- }
- void assert_mle(bool q) {
- static int * arr;
- while (!q) {
- arr = new int[256];
- }
- }
- void build(int node,int start,int end,int depth=0)
- {
- buildCnt++;
- assert(buildCnt <= (int)1e7);
- assert_re(depth <= 20);
- if(start+1==end)
- {
- evencount[node]=(A[start]%2==0);
- return;
- }
- int mid=start+(end-start)/2;
- build(2*node+1,start,mid,depth+1);
- build(2*node+2,mid+1,end,depth+1);
- int left=2*node+1;
- int right=2*node+2;
- evencount[node]=evencount[left]+evencount[right];
- }
- void update(int node,int start,int end,int idx,int val,int depth=0)
- {
- updateCnt++;
- assert(updateCnt <= (int)1e7);
- assert_tle(depth <= 20);
- if(start+1==end)
- {
- A[idx]=val%2;
- evencount[node]=(val%2==0);
- return;
- }
- int mid=start+(end-start)/2;
- if(idx <= mid)
- {
- update(2*node+1,start,mid,idx,val,depth+1);
- }
- else{
- update(2*node+2,mid+1,end,idx,val,depth+1);
- }
- int left=2*node+1;
- int right=2*node+2;
- evencount[node]=evencount[left]+evencount[right];
- }
- int query(int node,int start,int end,int left,int right,int depth=0)
- {
- queryCnt++;
- assert(queryCnt <= (int)1e7);
- assert_mle(depth <= 20);
- if(end < left || start > right)
- {
- return 0;
- }
- if(left<=start && end>=right)
- return evencount[node];
- int mid=start+(end-start)/2;
- int p1,p2;
- p1=query(2*node+1,start,mid,left,right,depth+1);
- p2=query(2*node+2,mid+1,end,left,right,depth+1);
- return p1+p2;
- }
- int main(){
- int N;
- cin>>N;
- for(int i=0;i<N;i++)
- {
- cin>>num;
- A[i]=num%2;
- }
- int Q;
- cin>>Q;
- for(int i=0;i<Q;i++)
- {
- int q,a,b;
- cin>>q>>a>>b;
- if(q==0)
- update(0,0,N,a-1,b);
- else
- {
- int t=query(0,0,N,a-1,b-1);
- if(q==1)
- cout<<t<<endl;
- else
- cout<<(b-a+1)-t<<endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement