CDQを述べ、千本のナイフトピックを受け、このいまいましい道を言及する必要があります。
ミニマリストの質問が表面化:
Tiはポイントを置く時の二次元平面、(XI、YI)が与えられ、時間TJの数を指すブロックでクエリ
質問を参照してください2次元のツリーラインがああファックので、水???
落胆データ範囲の警告
ほとんどビットの1次元配列はあまり... 1E6 * 1E6のですか?いくつかのGB???
...
だから、偉大な分割統治CDQを果たしました。
実際には、翻訳はこのような問題に直面することがあります。
時間内の挿入点、現在のポイントが数未満である(x、y)と時間点未満に依頼します
そのCDQの事はありませんか?裸のテンプレートのタイトルもさります。。。
統計は00ポイントからなる大規模な矩形があるので、しかし、あなたは半順序4点をカウントするので、そう、2つの長方形、プラス小さな長方形をカットし、差(2次元差分)を見てみたいことがあり
要約すると、それはCDQです。
最初の時間次元、二次元、X、三次元のY
オフラインで行うようにしてください
だから、快適なCDQを始めました
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 const int型 MAXN = 505 ; 構造体ノード { int型の時間、X、Y、ヴァル、ID。 } E [MAXN]。 int型 M、CNT、T [MAXN << 1 ]、[MAXN]は、[MAXN] ANS。 インラインINT lowbit(INT X) { 戻り X& - X。 } ボイド追加(int型のx、int型のY) { ため(; X <= Mであり、X + = lowbit(X)) { T [X] + = Y。 } } INT(ASK INT X) { int型 RES = 0 。 用(; X; X- = lowbit(X)) { RES + = T [X]。 } 戻りRESと、 } ブールCMP2(ノードA、ノードB) { 場合(AX = BX!)戻り AX < BX。 もし(!AY =による)リターン <AY によって、 // それ以外の戻りa.time <b.time。 } BOOL CMP(ノードA、ノードB) { 戻り a.time < b.time。 } のボイドCDQ(int型 L、INT R) { 場合(L == R)のリターン; INT半ば= L + R >> 1 。 CDQ(L、MID)。 CDQ(MID + 1 、R)。 ソート(E + L、E + 1 + R、CMP2)。 以下のために(int型私はLを=; I <= R; iが++ ) { 場合(E [I] .X <=ミッド&& E [I] .ID == 0 ) (Eを追加[I]・Y、E [I] .val ); 他の E [i]は.val + = ([I] .Y e)を尋ねます。 } のために(int型 I = 1と、iが<= R; iは++ ) { もし(E [I] .X <=ミッド&&のE [I] .ID == 0 ) を追加(E [I] .Y、 - E [I] .val)。 } } int型)(読み取り { int型の F = 1、X = 0。チャー S = GETCHAR()。 一方、(S> ' 9 ' || S < ' 0 '){ もし、(S == ' - ')、F = - 1 ; S = GETCHAR();} 一方、(S <= ' 9 ' && S> = ' 0 "S- + ' 0 ' ; S = GETCHAR();} 戻りのx *のF。 } int型のmain() { (読み取り) M = 読み取ります(); int型フラグ= 読み取ります(); ながら(!=フラグ3 ) { 場合(フラグ== 1 ) { int型のx =リード()+ 1、yが読み出さ=()+ 1、ヴァル= 読み取ります(); E [ ++ CNT] =(ノード){CNT、X、Y、ヴァル、0 }。 } 他 { INT)(= X1を読み出す、YL =読む()、X2 =読む()+ 1、Y2 =読む()+ 1 ; E [ ++ CNT] =(ノード){CNT、X1、YL、0、1 }。 //データ構造 E [ ++ CNT] =(ノード){CNT、X2、Y2、0、1 }、 E [ ++ CNT] =(ノード){CNT、X2、YL、0、1 }。 E [ ++ CNT] =(ノード){CNT、X1、Y2、0、1。;} } フラグに = ;リード() } CDQ(1 、CNT);およびライン上のハードCDQ ソート(E + 1、E + + CNT 1、CMP)。 用(int型 i = 1 ; iが= CNTを<; ++ i)は 、{ もし、(E [I] .ID == 1 ) { のprintf(" %d個の\ n "、E [I] .val + E [I + 1 ] .val-E [I + 2 ] .val-E [I + 3 ] .val)。 I + = 3 ; } } 戻り 0 。 }
(終わり)