Advertisement
Saleh127

UVA 12532

Jun 12th, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int t; cin>>t; for(int cs=1;cs<=t;cs++)
  5. ll a[100005];
  6. ll tree[400005];
  7.  
  8. void treeconstruct(ll node,ll b,ll e)
  9. {
  10.  
  11. if(b==e)
  12. {
  13. tree[node]=a[b];
  14. return;
  15. }
  16.  
  17. ll left = node*2;
  18. ll right = node*2 + 1ll;
  19.  
  20. ll mid=(b+e)/2;
  21.  
  22. treeconstruct(left,b,mid);
  23. treeconstruct(right,mid+1,e);
  24.  
  25. tree[node]=tree[left]*tree[right];
  26.  
  27. }
  28.  
  29. void update(ll node,ll b,ll e,ll i,ll newv)
  30. {
  31. if(i>e || i<b) return;
  32.  
  33. if(b==e)
  34. {
  35. tree[node]=newv;
  36. return;
  37. }
  38.  
  39. ll left = node*2;
  40. ll right = node*2 + 1ll;
  41.  
  42. ll mid=(b+e)/2;
  43.  
  44. update(left,b,mid,i,newv);
  45.  
  46. update(right,mid+1,e,i,newv);
  47.  
  48. tree[node]=tree[left]*tree[right];
  49.  
  50. }
  51.  
  52. ll queries(ll node,ll b,ll e,ll i,ll j)
  53. {
  54. if(i>e || j<b) return 1;
  55.  
  56. if(b>=i && e<=j) return tree[node];
  57.  
  58.  
  59. ll left = node*2;
  60. ll right = node*2 + 1ll;
  61.  
  62. ll mid=(b+e)/2;
  63.  
  64. ll x=queries(left,b,mid,i,j);
  65.  
  66. ll y=queries(right,mid+1,e,i,j);
  67.  
  68. return x*y;
  69.  
  70. }
  71.  
  72.  
  73.  
  74. int main()
  75. {
  76. ios_base::sync_with_stdio(0);
  77. cin.tie(0);
  78. cout.tie(0);
  79.  
  80.  
  81. ll n,q;
  82.  
  83. while(cin>>n>>q)
  84. {
  85. ll m,i,j,k,l;
  86.  
  87. char c;
  88.  
  89. for(i=1; i<=n; i++)
  90. {
  91. cin>>m;
  92. if(m<0) a[i]=-1;
  93. else if(m==0) a[i]=0;
  94. else a[i]=1;
  95. }
  96.  
  97. treeconstruct(1ll,1ll,n);
  98.  
  99. while(q--)
  100. {
  101. cin>>c>>j>>l;
  102.  
  103. if(c=='C')
  104. {
  105. if(l<0) l=-1;
  106. else if(l==0) l=0;
  107. else l=1;
  108.  
  109. update(1ll,1ll,n,j,l);
  110. }
  111. else if(c=='P')
  112. {
  113. m=queries(1ll,1ll,n,j,l);
  114.  
  115. if(m==0) cout<<"0";
  116. else if(m<0) cout<<"-";
  117. else cout<<"+";
  118. }
  119. }
  120. cout<<endl;
  121.  
  122. }
  123. return 0;
  124. }
  125.  
  126.  
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement