Advertisement
Farjana_akter

Untitled

Nov 24th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long int arr[100005],tree[100005];
  4.  
  5.  
  6. void buildtree(long long int node,long long int start,long long int e)
  7. {
  8. if(start==e)
  9. {
  10. tree[node]=arr[e];
  11. return;
  12. }
  13. long long int mid=(start+e)/2;
  14. long long int left=node*2;
  15. long long int right=left+1;
  16. buildtree(left,start,mid);
  17. buildtree(right,mid+1,e);
  18. tree[node]=tree[left]*tree[right];
  19. }
  20.  
  21.  
  22. void update(long long int node,long long int start,long long int e,long long int index,long long int value)
  23. {
  24. if(index>e||index<start)
  25. return;
  26. if(start==e)
  27. {
  28. // cout<<" before update "<<tree[node]<<endl;
  29. tree[node]=value;
  30. // cout<<"updated value "<<tree[node]<<endl;
  31. return;
  32. }
  33. long long int mid=(start+e)/2;
  34. long long int left=node*2;
  35. long long int right=left+1;
  36. update(left,start,mid,index,value);
  37. update(right,mid+1,e,index,value);
  38. tree[node]=tree[left]*tree[right];
  39. }
  40.  
  41.  
  42. long long int query(long long int node,long long int start,long long int e,long long int ranges,long long int rangef)
  43. {
  44. if(ranges>e||rangef<start)
  45. {
  46. return 1;
  47. }
  48. if(ranges<=start&&rangef>=e)
  49. {
  50. return tree[node];
  51. }
  52. long long int left=node*2;
  53. long long int right=left+1;
  54. long long int mid=(start+e)/2;
  55. long long int ans1=query(left,start,mid,ranges,rangef);
  56. long long int ans2=query(right,mid+1,e,ranges,rangef);
  57. return ans1*ans2;
  58.  
  59. }
  60.  
  61.  
  62. int main()
  63. {
  64. // freopen("input.txt","r",stdin);
  65. // freopen("output.txt","w",stdout);
  66. long long int q,index,value,ranges,n,rangef,ans,a;
  67. char c;
  68. string res;
  69. while(cin>>n>>q)
  70. {
  71. memset(tree,0,sizeof(tree));
  72. memset(arr,0,sizeof(arr));
  73. res.clear();
  74. for(int i=1; i<=n; i++)
  75. {
  76. cin>>a;
  77. if(a>0)
  78. a=1;
  79. else if(a<0)
  80. a=-1;
  81. arr[i]=a;
  82. }
  83. // for(int i=1; i<=n; i++)
  84. // cout<<arr[i]<<" ";
  85. buildtree(1,1,n);
  86. while(q--)
  87. {
  88. cin>>c;
  89. if(c=='C')
  90. {
  91. cin>>index>>value;
  92. if(value>0)
  93. value=1;
  94. else if(value<0)
  95. value=-1;
  96. else
  97. value=0;
  98. update(1,1,n,index,value);
  99. }
  100. else
  101. {
  102. cin>>ranges>>rangef;
  103. ans=query(1,1,n,ranges,rangef);
  104. // cout<<"ans "<<ans<<endl;
  105. if(ans==0)
  106. res.push_back('0');
  107. else if(ans<0)
  108. res.push_back('-');
  109. else
  110. res.push_back('+');
  111. }
  112.  
  113. }
  114. for(int i=0; i<res.size(); i++)
  115. cout<<res[i];
  116. cout<<endl;
  117. }
  118. return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement