冬の1日目:チームのMo +アルゴリズムブロックの暴力

TO DO LIST:

  • ブロック暴力
  • Moのアルゴリズムチーム
  • W 50 +

 

 

 

暴力ブロック:

羅区P1816は、忠誠心を見ることができます     https://www.luogu.com.cn/problem/P1816

問題の解決策:https://www.luogu.com.cn/problemnew/solution/P1816?page=2

所定の区間内の最小値にクエリ

知識ブロックの暴力を見て、その後、Moのチームに行きます

 

書式#include <stdio.hに> 
する#include <アルゴリズム> 
書式#include < 文字列の.h> 
の#include <cmath> 
の#include <iostreamの>
 使用して 名前空間はstdを、
#define INF 0x3f3f3f3f
 CONST  INT N = 1E5 + 20 

int型ブロック;
int型[N] [N]属し、[N]を、ミネソタ州。

INTクエリ(int型のx、int型のY)
{ 
    int型 M = INF。
    int型 I = X; I <=分(属し[X] *ブロック、Y); I ++ 
        、M = 分([I]、M)。
    もし(属し[X] =!属し[Y])
    { 
        ためINT I =([Y]属する- 1)*ブロック+ 1 ; I <= Y; I ++ 
            、M = 分(M、[I])。
    } 
    のためのINT I =属し[X] + 1 ; [Y]属するI <= - 1 ; I ++ 
        、M = 分(M、[I]ミネソタ州)。
    リターンメートル。
} 

int型のmain()
{ 
    int型N、K、AA、BB。
    scanf関数(" %D%D "、&​​N&K)。
    ブロック = SQRT(N)。
    memset(ミネソタ州、INF、はsizeof(ミネソタ州)); // 注意クリアINF 
    ためINT I = 1 ; I <= N; I ++ 
    { 
        scanfの(" %のD "、&​​A [I]); 
        属する[I] = (I- 1)/ブロック+ 1。; 
        ミネソタ州[属し[I] = 分(ミネソタ州、[I] [I]属する]);
         // 最小ミネソタは用語に対する各ブロックに記録され、必ずしもすべての添字
         // 各ブロックの最小値と最小電流値と比較
    } 

    ためINT I = 1 ; I <= K; I ++ 
    { 
        scanfの("%D%D "&AA& BB);
         INT = W クエリ(AA、BB)、
         場合(iは== K)
            のprintf(" %D \ n " )W;
         
            のprintf(" %dの" W、 ); 
    } 
    戻り 0 ; 
}

 

 

チームのMoアルゴリズム:

ユークリッド距離:ピタゴラスの定理であります

マンハッタン距離:

チェビシェフ距離:

 

 

 

おすすめ

転載: www.cnblogs.com/OFSHK/p/12181516.html