Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- long long int arr[100005],tree[100005];
- void buildtree(long long int node,long long int start,long long int e)
- {
- if(start==e)
- {
- tree[node]=arr[e];
- return;
- }
- long long int mid=(start+e)/2;
- long long int left=node*2;
- long long int right=left+1;
- buildtree(left,start,mid);
- buildtree(right,mid+1,e);
- tree[node]=tree[left]*tree[right];
- }
- void update(long long int node,long long int start,long long int e,long long int index,long long int value)
- {
- if(index>e||index<start)
- return;
- if(start==e)
- {
- // cout<<" before update "<<tree[node]<<endl;
- tree[node]=value;
- // cout<<"updated value "<<tree[node]<<endl;
- return;
- }
- long long int mid=(start+e)/2;
- long long int left=node*2;
- long long int right=left+1;
- update(left,start,mid,index,value);
- update(right,mid+1,e,index,value);
- tree[node]=tree[left]*tree[right];
- }
- long long int query(long long int node,long long int start,long long int e,long long int ranges,long long int rangef)
- {
- if(ranges>e||rangef<start)
- {
- return 1;
- }
- if(ranges<=start&&rangef>=e)
- {
- return tree[node];
- }
- long long int left=node*2;
- long long int right=left+1;
- long long int mid=(start+e)/2;
- long long int ans1=query(left,start,mid,ranges,rangef);
- long long int ans2=query(right,mid+1,e,ranges,rangef);
- return ans1*ans2;
- }
- int main()
- {
- // freopen("input.txt","r",stdin);
- // freopen("output.txt","w",stdout);
- long long int q,index,value,ranges,n,rangef,ans,a;
- char c;
- string res;
- while(cin>>n>>q)
- {
- memset(tree,0,sizeof(tree));
- memset(arr,0,sizeof(arr));
- res.clear();
- for(int i=1; i<=n; i++)
- {
- cin>>a;
- if(a>0)
- a=1;
- else if(a<0)
- a=-1;
- arr[i]=a;
- }
- // for(int i=1; i<=n; i++)
- // cout<<arr[i]<<" ";
- buildtree(1,1,n);
- while(q--)
- {
- cin>>c;
- if(c=='C')
- {
- cin>>index>>value;
- if(value>0)
- value=1;
- else if(value<0)
- value=-1;
- else
- value=0;
- update(1,1,n,index,value);
- }
- else
- {
- cin>>ranges>>rangef;
- ans=query(1,1,n,ranges,rangef);
- // cout<<"ans "<<ans<<endl;
- if(ans==0)
- res.push_back('0');
- else if(ans<0)
- res.push_back('-');
- else
- res.push_back('+');
- }
- }
- for(int i=0; i<res.size(); i++)
- cout<<res[i];
- cout<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement