Advertisement
Rock-Lee

É MINHA PRIMEIRA VEZ, SEN...SENPAI

Apr 8th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define MAXN 100007
  3.  
  4. using namespace std;
  5.  
  6. typedef long long int lli;
  7.  
  8. int arr[MAXN];
  9. lli sgtree[4*MAXN];
  10.  
  11. void build( int id, int left, int right ) {
  12.     if( left == right ) sgtree[id] = arr[left];
  13.     else {
  14.         int mid = ( left+right ) / 2;
  15.         build( id*2, left, mid );
  16.         build( id*2+1, mid+1, right );
  17.         sgtree[id] = sgtree[id*2] * sgtree[id*2+1];
  18.     }
  19. }
  20.  
  21. void update( int id, int left, int right, int value, int pos ) {
  22.     if( left == right ) sgtree[id] = value;
  23.     else {
  24.         int mid = ( left + right ) / 2;
  25.         if( pos <= mid ) update( id * 2, left, mid, value, pos );
  26.         else update( id*2+1, mid+1, right, value, pos );
  27.     }
  28.     sgtree[id] = sgtree[id*2] * sgtree[id*2+1];
  29. }
  30.  
  31. int query( int id, int left, int right, int x, int y ) {
  32.     if( x <= left && right <= y) return sgtree[id];
  33.     else if( y < left || right < x ) return 1;
  34.     else {
  35.         int mid = ( left + right ) / 2;
  36.         return query( id*2, left, mid, x, y) * query( id*2+1, mid+1, right, x, y);
  37.     }
  38. }
  39.  
  40. int main() {
  41.     int n, k, n1, n2;
  42.     lli mult;
  43.     char letter;
  44.  
  45.     while( scanf( "%d %d", &n, &k ) != EOF ) {
  46.         string resp = "";
  47.         // memset( arr, 0, sizeof( arr ) );
  48.         // memset( sgtree, 1, sizeof( sgtree ) );
  49.         for( int i = 1; i <= n; i++ ) scanf( "%d", &arr[i] );
  50.  
  51.         build( 1, 1, n );
  52.         for( int i = 1; i <= k; i++ ) {
  53.             scanf( "%c %d %d", &letter, &n1, &n2 );
  54.             if( letter == 'C' ) update( 1, 1, n, n2, n1 );
  55.  
  56.             else if( letter == 'P' ) {
  57.                 mult = query( 1, 1, n, n1, n2 );
  58.                 cout << endl << "O mult é = " << mult << endl;
  59.                 if( mult == 0 ) resp += "0";
  60.                 else if( mult > 0 ) resp += "+";
  61.                 else if( mult < 0 ) resp += "-";
  62.             }
  63.         }
  64.         cout << endl << "RESP = " << resp << endl;
  65.     }    
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement