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 。 }