zoukankan      html  css  js  c++  java
  • HDU 1698 Just a Hook(线段树区间覆盖)

    线段树基本操作练习,防手生

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    
    #define lson l, m, rt << 1
    #define rson m + 1, r, rt << 1 | 1
    #define lc rt << 1
    #define rc rt << 1 | 1
    
    const int MAXN = 100100;
    
    int sum[MAXN << 2];
    int lazy[MAXN << 2];
    
    void PushUp( int rt )
    {
        sum[rt] = sum[lc] + sum[rc];
        return;
    }
    
    void PushDown( int rt, int m )
    {
        if ( lazy[rt] )
        {
            lazy[lc] = lazy[rt];
            lazy[rc] = lazy[rt];
    
            /*这里注意写法,之前我传进来的是l, r, m
             *sum[lc] = lazy[rt]*( m - l + 1 );
             *sum[rc] = lazy[rt]*( r - m + 1 );
             *然后WA了
             **/
            sum[lc] = lazy[rt]*( m - ( m >> 1 ) );
            sum[rc] = lazy[rt]*( m >> 1 );
    
            lazy[rt] = 0;
        }
        return;
    }
    
    void build( int l, int r, int rt )
    {
        lazy[rt] = 0;
        sum[rt] = 1;
        if ( l == r ) return;
        int m = ( l + r ) >> 1;
        build( lson );
        build( rson );
        PushUp(rt);
        return;
    }
    
    void Update( int L, int R, int c, int l, int r, int rt )
    {
        if ( L <= l && r <= R )
        {
            lazy[rt] = c;
            sum[rt] = c * ( r - l + 1 );
            return;
        }
    
        int m = ( l + r ) >> 1;
        PushDown( rt, r - l + 1 );
        if ( L <= m ) Update( L, R, c, lson );
        if ( R > m  ) Update( L, R, c, rson );
        PushUp( rt );
    
        return;
    }
    
    int N, Q;
    
    int main()
    {
        int T, cas = 0;
        scanf( "%d", &T );
        while ( T-- )
        {
            scanf( "%d", &N );
            build( 1, N, 1 );
            scanf( "%d", &Q );
            while ( Q-- )
            {
                int a, b, c;
                scanf( "%d%d%d", &a, &b, &c );
                Update( a, b, c, 1, N, 1 );
            }
            printf("Case %d: The total value of the hook is %d.
    ", ++cas, sum[1] );
        }
        return 0;
    }
  • 相关阅读:
    vue 分页 pagination
    查看android 签名文件keystore的有效期限
    cordova + vue 项目实现极光推送功能
    vue window
    input
    vue install 组件
    cordova 的安桌动画
    深度图
    css3 Transition动画执行时有可能会出现闪烁的bug
    windows zip命令
  • 原文地址:https://www.cnblogs.com/GBRgbr/p/3408999.html
Copyright © 2011-2022 走看看