• 【宁夏区域赛】G.Pot!


    题意:

    给定两个操作:

    MULTIPLY L R x  区间里都乘以一个数x

    MAX L R : 计算区间内一个2,3,5,7个数最大值。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N = 1e5 + 10 ;
     4 int Max[N<<2][4] ;
     5 int Add[N<<2][4] ;
     6 
     7 const int prime[] = { 2 , 3 , 5 , 7 };
     8 
     9 void Push_Down( int Id , int val ){
    10     if( Add[Id][val] ){
    11         Add[Id << 1 ][ val ] += Add[ Id ][ val ];
    12         Add[Id << 1 | 1 ][ val ] += Add[ Id ][ val ];
    13 
    14         Max[Id << 1 ][ val ] += Add[ Id ][ val ];
    15         Max[Id << 1 | 1 ][ val ] += Add[ Id ][ val ];
    16 
    17         Add[Id][val] = 0 ;
    18     }
    19 }
    20 
    21 void Update( int Id ,int L , int R , int x , int y , int val ){
    22     if( x <= L && R <= y ){
    23         Max[Id][val] ++ ;
    24         Add[Id][val] ++ ;
    25         return ;
    26     }
    27     int Mid = L + R >> 1 ;
    28     Push_Down( Id , val );
    29 
    30     if( x <= Mid ){
    31         Update( Id << 1 , L , Mid , x , y , val );
    32     }
    33     if( Mid < y ){
    34         Update( Id << 1 | 1 , Mid + 1 , R , x , y , val );
    35     }
    36 
    37     Max[Id][val] = max( Max[ Id<<1 ][val] , Max[ Id<<1 | 1 ][val] );
    38 }
    39 
    40 int Query( int Id , int L , int R , int x , int y ,int val ){
    41     if( x <= L && R <= y ){
    42         return Max[Id][val] ;
    43     }
    44     int Mid = L + R >> 1 ;
    45     int res = 0 ;
    46 
    47     Push_Down( Id , val );
    48     if( x <= Mid ){
    49         res = max( res , Query( Id << 1 , L , Mid , x , y , val ) );
    50     }
    51     if( Mid < y ){
    52         res = max( res , Query( Id << 1 | 1 , Mid+1 , R , x , y , val ) );
    53     }
    54     return res ;
    55 }
    56 
    57 int main()
    58 {
    59     int n , Q ;
    60     scanf("%d%d",&n,&Q);
    61     while( Q-- ){
    62         char s[10] ;
    63         int L , R , x , res ;
    64         scanf("%s",s);
    65         if( s[1] == 'U' ){
    66             scanf("%d%d%d",&L,&R,&x);
    67             for( int i = 0 ; i < 4 ; i ++ ){
    68                 if( x % prime[i] == 0 ){
    69                     while( x % prime[i] == 0  ){
    70                         Update( 1 , 1 , n , L , R , i );
    71                         x /= prime[i] ;
    72                     }
    73                 }
    74             }
    75         }else{
    76             scanf("%d%d",&L,&R);
    77             res = 0 ;
    78             for( int i = 0 ; i < 4 ; i++ ){
    79                 int tmp = Query( 1 , 1 , n , L , R , i );
    80                 if( tmp > res ) res = tmp ;
    81             }
    82             printf("ANSWER %d
    ",res);
    83         }
    84     }
    85     return 0;
    86 }
    Pot
  • 相关阅读:
    DataTables: Cannot read property 'length' of undefined
    ssis SQL Server Integration Services
    科技爱好者周刊(第 209 期):程序员是怎样的人
    How do I remove the first characters of a specific column in a table?
    Define your Classic pipeline
    How does comparison operator works with null int?
    How to set Google Chrome custom proxy server settings independently from Internet Explorer proxy settings
    GetUniqueNodeName
    RK3399Pro 音频配置
    查看USB设备
  • 原文地址:https://www.cnblogs.com/Osea/p/11722736.html
Copyright © 2020-2023  润新知