亚洲免费人人妻人人,cao78在线视频,福建一级毛片,91精品视频免费观看,高清另类图片操逼,日本特黄特色大片免费看,超碰欧美人人澡曰曰澡夜夜泛

Count Color -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【m.msguai.com - 電腦資料】

    線段樹,染色問題

    ?

    // 3d.cpp : 定義控制臺應用程序的入口點,

Count Color

。

    //

    //#include "stdafx.h"

    #include

    #include

    #include

    using namespace std;

    #define lson l, m, rt << 1

    #define rson m + 1, r, rt << 1 | 1

    const int maxn = 200005;

    int sum[ maxn << 2 ], Add[ maxn << 2 ];

    void PushUp( int rt ){

    sum[ rt ] = ( sum[ rt << 1 ] | sum[ rt << 1 | 1 ] );

    }

    void PushDown( int rt ){

    if( Add[ rt ] != 0 ){

    Add[ rt << 1 ] = Add[ rt << 1 | 1 ] = Add[ rt ];

    sum[ rt << 1 ] = sum[ rt << 1 | 1 ] = sum[ rt ];

    Add[ rt ] = 0;

    }

    }

    void Build( int l, int r, int rt ){

    Add[ rt ] = 0;

    sum[ rt ] = 1;

    if( l == r ){

    return;

    }

    int m = ( l + r ) >> 1;

    Build( lson );

    Build( rson );

    PushUp( rt );

    }

    void Update( int L, int R, int temp, int l, int r, int rt ){

    if( L <= l && r <= R ){

    Add[ rt ] = 1;

    sum[ rt ] = temp;

    return;

    }

    PushDown( rt );

    int m = ( l + r ) >> 1;

    if( L <= m ){

    Update( L, R, temp, lson );

    }

    if( R > m ){

    Update( L, R, temp, rson );

    }

    PushUp( rt );

    }

    int Query( int L, int R, int l, int r, int rt ){

    if( L == l && r == R ){

    return sum[ rt ];

    }

    PushDown( rt );

    int m = ( l + r ) >> 1;

    int ans = 0;

    if( R <= m )

    ans = Query( L, R, lson );

    else if( L > m )

    ans = Query( L, R, rson );

    else

    ans = ( Query( L, m, lson ) | Query( m + 1, R, rson ) );

    return ans;

    }

    //int _tmain(int argc, _TCHAR* argv[])

    int main()

    {

    int n, m, k, a, b, c;

    char str[ 10 ];

    while( scanf( "%d%d%d", &n, &m, &k ) != EOF ){

    Build( 1, n, 1 );

    while( k-- ){

    scanf( "%s", str );

    if( str[ 0 ] == 'C' ){

    scanf( "%d%d%d", &a, &b, &c );

    Update( a, b, 1 << ( c - 1 ), 1, n, 1 );

    }

    else{

    scanf( "%d%d", &a, &b );

    if( a > b )

    swap( a, b);

    int temp = Query( a, b, 1, n, 1 );

    int ans = 0;

    while( temp ){

    if( temp % 2 != 0 )

    ans++;

    temp = ( temp >> 1 );

    } 

最新文章