ツリー次元アレイ(テンプレート)

1.シングルポイントの変更、クエリーインターバル

<ビット/ STDC ++ H>の#include
 の#define再戻り
 の#defineが長い長いちゃう 
 の#define - lowbit(X)(x)は、x&()
 の#define ; iは<INC(I、L、R)(I = 1をint型のため= R; ++ i)を
 使用して 名前空間STDを、
テンプレート <型名T>インラインボイド RD(T&X)
{ 
    チャー C。BOOL F = 0 一方、((C = GETCHAR())< ' 0 ' || C> ' 9 'であれば(C == ' - ')、F = 1 
    X = C ^ 48;
    一方、((C = GETCHAR())> = ' 0 ' && C <= ' 9 ')、X = X * 10 +(C ^ 48 )。
    もし(F)X = - X。
} 

のconst  int型 MAXN = 5000 
LL N、M。
; [MAXN] [MAXN] C LL 

インラインボイドは、(Z -1,11,11- Y、LLのX)を追加
{ 
    ため(LL I = xで、iが<= N; iは+ = lowbit(I))
     のために(LL用J = yと、J <= M; J + = lowbit(J ))
        C [i]は[J] + = Z。
} 

インラインLL和(LLのX、LLのY)
{ 
    LL RES = 0;
    (I- =; I LL I = xでlowbit(I))
     のための(LL用J = Y; J; J- = lowbit(J))
    RES + = C [I] [J]。

    解像度の再; 
} 


int型のmain()
{ 
    freopenは(" in.txt "" R " 、STDIN)。
    
    LL、B、X、Y、Z、OPT。
    
    RD(n)は、RD(M)。
    一方、(〜(scanf関数(" %のLLD "、およびOPT)))
    { 
        場合(OPTの== 1 
        { 
            RD(x)は、RD(Y)、RD(Z)。
            (x、y、z)を加えます。
        }
         
        { 
            RD(A)、RD(B)、RD(x)は、RD(Y)。
            printf(" %LLDする\ n "、SUM(X、Y)+ SUM(A- 1、B- 1)-sum(X、B- 1)-sum(A- 1 、Y))。
        }     
    } 
    再度0 
}

 

おすすめ

転載: www.cnblogs.com/lsyyy/p/11425293.html