Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define mx 100005
- using namespace std;
- int a[mx];
- int tree[mx*4];
- void build_tree(int node,int b,int e)
- {
- tree[node]=0;
- if(b==e)
- {
- tree[node]=a[b];
- return;
- }
- int left=node*2;
- int right=node*2+1;
- int mid=(b+e)/2;
- build_tree(left, b ,mid);
- build_tree(right, mid+1, e);
- tree[node]=tree[left]+tree[right]; ///only changes will be made here
- }
- int query(int node, int b, int e, int i, int j)
- {
- if(i>e || j<b) /// gone in the right or left
- {
- return 0;
- }
- if(b>=i && e<=j) return tree[node];
- int left=node*2;
- int right=node*2+1;
- int mid=(b+e)/2;
- int ret1=query(left, b ,mid,i,j);
- int ret2=query(right, mid+1, e,i,j);
- return ret1+ret2; ///only changes will be made here
- }
- void update(int node, int b, int e, int i, int new_val)
- {
- // i is the position that is being updated
- if(i>e || i<b) /// gone in the right or left
- {
- return;
- }
- if(b>=i && e<=i)
- {
- if(new_val==-1)
- {
- printf("%d\n",tree[node]);
- tree[node]=0;
- }
- else
- tree[node]+=new_val; //changes could be here as well
- return;
- }
- int left=node*2;
- int right=node*2+1;
- int mid=(b+e)/2;
- if(i<=mid)
- update(left, b ,mid,i,new_val);
- else
- update(right, mid+1, e,i,new_val);
- tree[node]= tree[left] + tree[right]; ///only changes will be made here
- }
- int main()
- {
- // freopen("input.txt","r",stdin); //input query indexing 0 theke hole query te
- //x+1 , y+1 korte hobe
- int n,t,cs=1,q;
- int x,y;
- int input;
- cin>>t;
- while(t--)
- {
- cin>>n>>q;
- for(int i=1;i<=n;i++)
- {
- scanf("%d",&a[i]);
- }
- build_tree(1,1,n);
- printf("Case %d:\n",cs++);
- while(q--)
- {
- scanf("%d",&input);
- if(input==1)
- {
- scanf("%d",&x);
- update(1,1,n,x+1,-1);
- }
- else if(input==2)
- {
- scanf("%d%d",&x,&y);
- update(1,1,n,x+1,y);
- } else if(input==3)
- {
- scanf("%d%d",&x,&y);
- int z=query(1,1,n,x+1,y+1);
- printf("%d\n",z);
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement