using
System;
using
System.Collections.Generic;
class
GFG
{
static
int
calculateMinDiff(
int
[] arr,
int
k ,
int
n)
{
int
ans = Int32.MaxValue;
List<Tuple<
int
,
int
>> pq =
new
List<Tuple<
int
,
int
>>();
for
(
int
i = 0; i < n; i++)
{
if
(arr[i] % k == 0)
pq.Add(
new
Tuple<
int
,
int
>( arr[i] / k, i ));
pq.Add(
new
Tuple<
int
,
int
>( arr[i], i ));
pq.Add(
new
Tuple<
int
,
int
>(arr[i] * k, i ));
}
pq.Sort();
pq.Reverse();
Dictionary<
int
,
int
> mp =
new
Dictionary<
int
,
int
>();
while
(pq.Count > 0)
{
Tuple<
int
,
int
> temp = pq[0];
pq.RemoveAt(0);
mp[temp.Item1] = temp.Item2;
if
(mp.Count == n)
{
int
min_value = Int32.MaxValue;
foreach
(KeyValuePair<
int
,
int
> x
in
mp)
{
min_value=Math.Min(min_value, x.Value);
}
ans = Math.Min(ans, temp.Item1 - min_value - 1);
}
}
return
ans;
}
static
void
Main()
{
int
[] arr = { 1, 2, 3, 4, 5, 10, 7 };
int
K = 5;
int
N = arr.Length;
Console.WriteLine(calculateMinDiff(arr, K, N));
}
}