Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define MAXN 100007
- using namespace std;
- typedef long long int lli;
- int arr[MAXN];
- lli sgtree[4*MAXN];
- void build( int id, int left, int right ) {
- if( left == right ) sgtree[id] = arr[left];
- else {
- int mid = ( left+right ) / 2;
- build( id*2, left, mid );
- build( id*2+1, mid+1, right );
- sgtree[id] = sgtree[id*2] * sgtree[id*2+1];
- }
- }
- void update( int id, int left, int right, int value, int pos ) {
- if( left == right ) sgtree[id] = value;
- else {
- int mid = ( left + right ) / 2;
- if( pos <= mid ) update( id * 2, left, mid, value, pos );
- else update( id*2+1, mid+1, right, value, pos );
- }
- sgtree[id] = sgtree[id*2] * sgtree[id*2+1];
- }
- int query( int id, int left, int right, int x, int y ) {
- if( x <= left && right <= y) return sgtree[id];
- else if( y < left || right < x ) return 1;
- else {
- int mid = ( left + right ) / 2;
- return query( id*2, left, mid, x, y) * query( id*2+1, mid+1, right, x, y);
- }
- }
- int main() {
- int n, k, n1, n2;
- lli mult;
- char letter;
- while( scanf( "%d %d", &n, &k ) != EOF ) {
- string resp = "";
- // memset( arr, 0, sizeof( arr ) );
- // memset( sgtree, 1, sizeof( sgtree ) );
- for( int i = 1; i <= n; i++ ) scanf( "%d", &arr[i] );
- build( 1, 1, n );
- for( int i = 1; i <= k; i++ ) {
- scanf( "%c %d %d", &letter, &n1, &n2 );
- if( letter == 'C' ) update( 1, 1, n, n2, n1 );
- else if( letter == 'P' ) {
- mult = query( 1, 1, n, n1, n2 );
- cout << endl << "O mult é = " << mult << endl;
- if( mult == 0 ) resp += "0";
- else if( mult > 0 ) resp += "+";
- else if( mult < 0 ) resp += "-";
- }
- }
- cout << endl << "RESP = " << resp << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement