• BZOJ 3544: [ONTAK2010]Creative Accounting( BST )


     题意 : 一段序列 , 求一段子序列和取余 M 的最大值

    其实是一道水题...

    前缀和 , 然后就是找 ( sum( r ) - sum( l ) ) % M 的最大值 . 考虑一个 sum( r ) , 在 sum( k ) ( 1 <= k < r ) 中 :

         sum( a ) > sum( r ) , sum( b ) < sum( r ) , sum( a ) 优于 sum( b ) 

         sum( a ) > sum( b ) > sum( r ) , sum( b ) 优于 sum( a )

         sum( r ) > sum( a ) > sum( b ) , sum( b ) 优于 sum( a )

    那这样可以直接用 set 维护 , 每次对于一个前缀和 sum( x ) , 在 set 中二分 > sum( x ) 的第一个数 ( upper_bound ) , 假如没有就取 set 的最小值 , 更新answer , 再把 sum( x ) 插入到 set 中

    ( 一道水题被我写了这么多..果然我还是太弱了 5555 , 我也难得敲个这么长的题解.. )

    --------------------------------------------------------------------------

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    #include<set>
     
    #define rep( i , n ) for( int i = 0 ; i < n ; ++i )
    #define clr( x , c ) memset( x , c , sizeof( x ) )
    #define Rep( i , n ) for( int i = 1 ; i <= n ; ++i )
     
    using namespace std;
     
    typedef long long ll;
     
    const int maxn = 200000 + 5;
     
    set< ll > S;
    ll MOD;
    int n;
     
    using namespace std;
     
    int main() {
    freopen( "test.in" , "r" , stdin );
    freopen( "test.out" , "w" , stdout );
    ll p = 0 , ans = -1LL << 62;
    cin >> n >> MOD;
    S.clear();
    S.insert( 0 );
    while( n-- ) {
    ll v;
    scanf( "%lld" , &v );
    v = ( v % MOD + MOD ) % MOD;
    p = ( ( v += p ) %= MOD );
    set< ll > :: iterator it = S.upper_bound( v );
    if( it == S.end() ) it = S.begin();
    S.insert( v );
    ans = max( ans , ( ( v - *it ) % MOD + MOD ) % MOD );
    }
    printf( "%lld " , ans );
    return 0;
    }

      

    -------------------------------------------------------------------------- 

    3544: [ONTAK2010]Creative Accounting

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 352  Solved: 183
    [Submit][Status][Discuss]

    Description

    给定一个长度为N的数组a和M,求一个区间[l,r],使得(sum_{i=l}^{r}{a_i}) mod M的值最大,求出这个值,注意这里的mod是数学上的mod

    Input

    第一行两个整数N,M。
    第二行N个整数a_i。

    Output

    输出一行,表示答案。

    Sample Input

    5 13
    10 9 5 -5 7

    Sample Output

    11


    HINT

    【数据范围】

    N<=200000,M,a_i<=10^18

    Source

  • 相关阅读:
    particcles.js in 安卓WebView
    PDF.js 主页样式以及获取流
    Oracle授权A中的表给B
    安卓Response 获取body的正确方式
    android.util.Base64 和 org.apache.commons.codec.binary.Base64
    DAY62-前端入门-javascript(九)jQurey高级
    DAY61-前端入门-javascript(八)jQurey
    DAY60-前端入门-javascript(七)JS动画 | JS盒模型 | DOM | BOM
    DAY59-前端入门-javascript(六)JS事件
    DAY58-前端入门-javascript(五)JS常用类
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4618344.html
Copyright © 2020-2023  润新知