Moは、チームのタイトルを取得、間隔はクエリの数と同じではありません
あなたは、ツリーラインで行うことができる必要がありますが、メンテナンスのかわかりません。
問題に非常に良い解決策:
https://www.cnblogs.com/MisakaAzusa/p/8684319.html
Moのチームアルゴリズムの問題の主な問題:
Moのアルゴリズムは、のようなチーム処理するために使用されている変更せずにオフライン間隔問い合わせを発行します。
Moは、チームの思考をアルゴリズム:
1、ソーティングブロックカール2つのポインタ移動CURRからできるだけ近く、かつできるだけ隣接照会部
2、行バケット問い合わせ
コード:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4 のconst int型 MAXN = 1E5 + 5 。 5 6 INTのN、M、BLO。 7 INTアンス= 0 、カール、CURR、CNT [MAXN]。 8つの // カール及びCURRの初期値が両方とも0である 9 構造体ノード{ 10 のint L、R、Q。 11 } Q [MAXN]。 12 INT [MAXN]。 13 INTは[MAXN] ANS。 14 15 ブールCMP(ノードX、ノードY){ 16 リターン(XL / BLO)==(イル/ BLO)?XR <年:XL < イル。 17 } 18 19 空隙追加(int型POS){ 20 であれば((++ CNT [POS]])== 1)++ アンス。 21 } 22 23 空隙デル(int型POS){ 24 であれば((--cnt [POS]])== 0) - アンス。 25 } 26 27 28 INT メイン(){ 29 CIN >> N >> M; BLO = SQRT(N)。 30 のための(int型 I = 1 ; I ++; iが<= N ) 31 CIN >> [I]。 32 のためには、(int型 I = 1 ; I <= M; iは++ ){ 33 CIN >> Q [i]は.L >> Q [i]は.R。 34 Q [i]は.Q = I。 35 } 36 37 ソート(Q + 1、Q + 1 + M、CMP)。 38 39 のために(int型 I = 1 ; I <= M; iは++ ){ 40 のint L = Q [i]は.L。INT R = Q [i]は.R。 41 一方、(カール<L)、デル(カール++ )。 42 一方(カール> L)を追加( - カール)。 43 一方(CURR <R)を追加(++ CURR)。 44 一方(CURR> R)デル(curR-- )。 45 であれば(ANS ==(R-L + 1 )) 46の ANS [Q [i]は.Q] = 1 。 47 } 48 49 のために(int型 I = 1 ; I <= M; iは++ ) 50 { 51 であれば(ANS [I] == 1)COUT << " はいの\ n " 。 52 他の裁判所未満<< " ノー\ nを" ; 53 } 54 リターン 0 。 55 }