問題の説明
次のようにタンペレ領域における第四世代携帯電話基地局が動作すると仮定する。領域は正方形に分割されています。四角は0からS-1まで番号を付け、行と列とS * Sマトリックスを形成します。各正方形は、基地局が含まれています。携帯電話は別の広場から移動したり、電話をオンまたはオフになっているので、正方形の内部のアクティブな携帯電話の番号は変更することができます。時間に、各基地局は、行と行列の列とともに主基地局へのアクティブな電話の数の変化を報告しています。
これらのレポートを受信して、任意の矩形形状の領域に積極的に携帯電話の現在の合計数についてのクエリに答えるプログラムを書きます。
これらのレポートを受信して、任意の矩形形状の領域に積極的に携帯電話の現在の合計数についてのクエリに答えるプログラムを書きます。
入力
入力は整数として標準入力から読み込まれ、クエリへの回答は整数として標準出力に書き込まれます。次のように入力が符号化されます。各入力は、別々の行に来て、1つの命令整数と次の表に従ってパラメータ整数の数で構成されています。
それらをチェックする必要がないので、値は常に、範囲内であろう。Aが負である場合は特に、ゼロ以下二乗値を低減しないであろうと仮定することができます。インデックスは、我々が持っているサイズ4×4のテーブルのために、たとえば、0から始まり、0 <= <= 3、0 <= Y <= 3. X
テーブルサイズ:1 * 1 <= S * S <=が1024 * 1024
任意の時点でのセル値V 0 <= V <= 32767
更新量:-32768 <= A <= 32767
入力における命令のNO:3 <= U <= 60002
テーブル全体の電話機の最大数:M = 2 ^ 30
それらをチェックする必要がないので、値は常に、範囲内であろう。Aが負である場合は特に、ゼロ以下二乗値を低減しないであろうと仮定することができます。インデックスは、我々が持っているサイズ4×4のテーブルのために、たとえば、0から始まり、0 <= <= 3、0 <= Y <= 3. X
テーブルサイズ:1 * 1 <= S * S <=が1024 * 1024
任意の時点でのセル値V 0 <= V <= 32767
更新量:-32768 <= A <= 32767
入力における命令のNO:3 <= U <= 60002
テーブル全体の電話機の最大数:M = 2 ^ 30
出力
命令が2である場合は、あなたのプログラムは2以外の命令を持つ行には何も答えてはいけません、そして、あなたのプログラムは、標準出力に単一の整数を含む単一の行としての回答を書き込むことで、クエリに答えるために期待されています。
サンプル入力
0 4 1 2 3 2 0 0 2 2 1 1 1 2 1 1 2 -1 2 1 1 2 3 3
サンプル出力
3 4
************************************************** ************************************************** ***********************
フェンウィックツリー
************************************************** ************************************************** ***********************
1の#include <iostreamの> 2の#include < ストリング > 3の#include <CStringの> 4の#include <cmath> 5の#include <cstdioを> 6の#include <キュー> 7 使って 名前空間STD。 8 int型 treearr [ 1100 ] [ 1100 ]。 9 int型N、XT、YT。 10 int型のxe、yeの値。 11 INT lowbit(INT X) 12 { 13 リターン(X&( - X)); 14 } 15 INTgetnum(int型のx、int型の Y)// 向上查询 16 { 17 int型の和= 0 。 18の int型 XS =のX。 19の int型YS; 20 一方(XS> 0 ) 21 { 22の YS = Y。 23 一方は(YS> 0 ) 24 { 25 + =和treearr [XS] [YS]。 26 ys- = lowbit(YS)。 27 } 28 XS- =lowbit(XS)。 29 } 30 リターン和。 31 } 32 空隙更新(int型のn、int型のx、int型の Y、int型の値)// 向下更新 33 { 34 INT XS = X。 35 INT YS = Y。 36 一方(XS <= N) 37 { 38の YS = Y。 39 一方(YS <= N) 40 { 41 treearr [XS] [YS] + = 値。 42で + = YS lowbit(YS); 43である } 44れる XS + = lowbit(XS); 45 } 46れる } 47 のint main()の 48 { 49 のint QRE; 50 scanfの(" %Dの%のD "、&QRE、&N-); 51れます 一方、(scanfの(" %のD "、&QRE)QRE &&!= 3)//が3に等しい場合、停止 52である { 53は IF(== QRE 。1)// 更新 54 { 55 のscanf(" %D%D%D "、およびXT、&YT、&値)。 56 ++ XT; ++ YT。 57 更新(N、XT、YT、値)。 58 } 59 他 60 であれば(QRE == 2)// 查询 61 { 62 のscanf(" %D%D%D%D "、およびXT、&YT、&XE、&がた)。 63 ++ XT; ++ XE; ++ YT; ++ がた。 64 INTスマ= getnum(XE、がた)-getnum(xt- 1、がた)-getnum(XE、yt- 1)+ getnum(xt-。1、YT- 1。); // 巧み、図塗装は理解するであろう。 65 のprintf(" %Dの\のN- " 、SUMA); 66 } 67 } 68 リターン 0 ; 69 }
質問があまりにも遅いですか!!ああ!!
ます。https://www.cnblogs.com/sdau--codeants/p/3375415.htmlで再現