Jeremiah_

Produto do intervalo - Neps

Apr 29th, 2019
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define forn(l, r) for(int i = l; i < (r); ++i)
  4. #define forj(l, r) for(int j = l; j < (r); ++j)
  5. #define TAM 1000100
  6. #define SYNC ios::sync_with_stdio(0);
  7. #define $ << ' ' <<
  8. #define F first
  9. #define S second
  10. #define endl '\n'
  11.  
  12.  
  13. using namespace std;
  14.  
  15. using ll = long long int;
  16. using ii = pair<int, int>;
  17. using vii = vector<ii>;
  18. using vi = vector<int>;
  19. using graph = vector<vi>;
  20. const int INF = 0x3f3f3f3f;
  21. const int MAXN = 112345;
  22. const ll mod = 1000000007;
  23.  
  24. ll seq[MAXN], segt[4*MAXN+1], n;
  25.  
  26. void build (int node, int l, int r) {
  27.     if (l == r) {
  28.         segt[node] = seq[l];
  29.     }else {
  30.         build(2*node+1, l, (l+r)/2);
  31.         build(2*node+2, (l+r)/2+1, r);
  32.         segt[node] = segt[node*2+1] * segt[node*2+2];
  33.     }
  34.  
  35. }
  36.  
  37. void update (int node, int l, int r, int pos, int val) {
  38.     if (l == r) {
  39.         seq[pos] = segt[node] = val;
  40.     } else {
  41.         int mid = (l+r)/2;
  42.         if (pos <= mid) update(2*node+1, l, mid, pos, val);
  43.         else update(2*node+2, mid+1, r, pos, val);
  44.         segt[node] = segt[node*2+1] * segt[node*2+2];
  45.     }
  46. }
  47.  
  48. int query  (int node, int l, int r, int low, int up) {
  49.     if (low > r || up < l) {
  50.         return 1;
  51.     }
  52.     if (low <= l && up >= r) {
  53.         return segt[node];
  54.     }
  55.     int mid = (l+r)/2;
  56.     return query(node*2+1, l, mid, low, up)*query(node*2+2, mid+1, r, low, up);
  57. }
  58.  
  59.  
  60. int main()
  61. {
  62.     SYNC
  63.     int k;
  64.         while(cin >> n >> k){
  65.         for (int i = 0; i < n; ++i) {
  66.             cin >> seq[i];
  67.             if (seq[i] > 0) {
  68.                 seq[i] = 1;
  69.             } else if (seq[i] < 0) {
  70.                 seq[i] = -1;
  71.             }
  72.         }
  73.         build(0, 0, n-1);
  74.         vector<char> ans;
  75.         char op;
  76.         int a, b;
  77.         while (k--) {
  78.             cin >> op >> a >> b;
  79.             if (op == 'C') {
  80.                 if (b > 0) {
  81.                     b = 1;
  82.                 } else if (b < 0) {
  83.                     b = -1;
  84.                 }
  85.                 update(0, 0, n-1, a-1, b);
  86.             } else {
  87.                 a = query(0, 0, n-1, a-1, b-1);
  88.                 if (a > 0) {
  89.                     ans.push_back('+');
  90.                 } else if (a == 0) {
  91.                     ans.push_back('0');
  92.                 } else {
  93.                     ans.push_back('-');
  94.                 }
  95.             }
  96.         }
  97.         for (int i = 0; i < (int) ans.size(); ++i) {
  98.             cout << ans[i];
  99.         }
  100.         cout << endl;
  101.     }
  102.  
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment