// OPERATION 3 // void update3( int i , int b , int c , int s , int e , int v ){ propogate( i , b , c ); if ( ( e < b) || ( c < s) ) { return ; } if ( ( s <= b) && ( c <= e) ) { tree[i] = ( (ll)( c - b + 1) * (ll) v )%mod ; if ( b != c) { lazy[ 2*i].a3 = 1 ; lazy[ 2*i].x= (ll) v; lazy[ 2*i].a1= 1ll; lazy[ 2*i].d= 0; lazy[ 2*i].a2= 0; lazy[ 2*i].y = 1 ; lazy[ 2*i + 1].y = 1 ; lazy[ 2*i + 1].a3 = 1; lazy[2*i + 1].x = (ll)v; lazy[2*i + 1].a1 = 1ll; lazy[2*i + 1].d = 0; lazy[2*i + 1].a2 = 0; } return ; } update3( 2*i , b , (b + c )/ 2 , s , e , v ); update3( 2*i + 1 , ( (b + c )/ 2 + 1 ) , c , s , e , v ); tree[i] = (tree[2*i] + tree[2*i + 1])%mod; }
int main(){ ll r; int t , n , h , q , i , s , e , type,v; scanf("%d%d" , &n , &q); h = (ceil)( log2(n)); size = 1<<( h + 1); for ( i = 1 ; i < size ; i++) { tree[i] = 0 ; clear(i); } for ( i = 0 ; i < n ; i++) { scanf("%d",&a[i]); } create( 1 , 0 , n - 1); while(q--) { scanf("%d" ,&type); if ( type == 2) { scanf("%d%d%d" , &s , &e,&v); s--; e--; v%=mod; update1( 1 , 0 , n-1 ,s , e,v); } else if ( type == 1) { scanf("%d%d%d" , &s , &e , &v); s--; e--; v%=mod; update2( 1 , 0 , n - 1 , s , e , v); } else if ( type == 3) { scanf("%d%d%d" , &s , &e , &v); s--; e--; v%=mod; update3( 1 , 0 , n - 1 , s , e , v); } else { scanf("%d%d" , &s , &e); s--; e--; r = query( 1 , 0 , n-1 ,s , e ); printf("%lld" , r); printf("\n"); } } return 0 ; }
int Enemy::update() { if (hittimer > 0) { hittimer--; if (hittimer == 0) { state = 0; } } if (parent->player != NULL) { double delta = x - parent->player->getx(); if (fabs (delta) > 1000) return 0; // out of range, don't update. } phase = (phase + 1) % period; SpriteEx::update(); switch (enemyType) { case 0: update1(); break; case 1: update2(); break; case 2: update3(); break; case 3: update4(); break; } return 0; }