P3901シリーズは、異なる(シンプルMoのチームを)見つけるために

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 }

 

おすすめ

転載: www.cnblogs.com/Msmw/p/11466456.html