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アルゴリズム:
ユークリッド距離:ピタゴラスの定理であります
マンハッタン距離:
チェビシェフ距離: