Advertisement
Farjana_akter

Untitled

Nov 24th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 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(start>index||e<index)
  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. else
  53. {
  54. long long int left=node*2;
  55. long long int right=left+1;
  56. long long int mid=(start+e)/2;
  57. long long int ans1=query(left,start,mid,ranges,rangef);
  58. long long int ans2=query(right,mid+1,e,ranges,rangef);
  59. return ans1*ans2;
  60. }
  61. }
  62.  
  63.  
  64. int main()
  65. {
  66. // freopen("input.txt","r",stdin);
  67. // freopen("output.txt","w",stdout);
  68. long long int q,index,value,ranges,n,rangef,ans;
  69. char c;
  70. string res;
  71. while(cin>>n>>q)
  72. {
  73. memset(tree,0,sizeof(tree));
  74. memset(arr,0,sizeof(arr));
  75. res.clear();
  76. for(int i=1; i<=n; i++)
  77. {
  78. cin>>arr[i];
  79. }
  80. buildtree(1,1,n);
  81. while(q--)
  82. {
  83. cin>>c;
  84. if(c=='C')
  85. {
  86. cin>>index>>value;
  87. update(1,1,n,index,value);
  88. }
  89. else
  90. {
  91. cin>>ranges>>rangef;
  92. ans=query(1,1,n,ranges,rangef);
  93. cout<<"ans "<<ans<<endl;
  94. if(ans==0)
  95. res.push_back('0');
  96. else if(ans<0)
  97. res.push_back('-');
  98. else
  99. res.push_back('+');
  100. }
  101.  
  102. }
  103. for(int i=0;i<res.size();i++)
  104. cout<<res[i];
  105. cout<<endl;
  106. }
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement