using
System;
using
System.Collections.Generic;
class
GFG
{
static
ulong
minCost(
ulong
[] arr,
ulong
A,
ulong
B,
ulong
N)
{
Array.Sort(arr);
ulong
[] cumarr =
new
ulong
[N];
ulong
sum = 0;
for
(
ulong
i = 0; i < N; i++)
{
sum += arr[i];
cumarr[i] = sum;
}
ulong
mid = (N - 1) / 2;
ulong
ans = (arr[mid] * (mid + 1) - cumarr[mid]) * A
+ (cumarr[N - 1] - cumarr[mid]
- (arr[mid] * (N - 1 - mid)))
* B;
if
(A == B)
return
ans;
else
if
(A < B) {
ulong
low = mid, high = N - 1;
while
(low <= high) {
mid = low + (high - low) / 2;
ulong
curr
= (arr[mid] * (mid + 1) - cumarr[mid])
* A
+ (cumarr[N - 1] - cumarr[mid]
- (arr[mid] * (N - 1 - mid)))
* B;
if
(curr <= ans) {
ans = curr;
low = mid + 1;
}
else
high = mid - 1;
}
return
ans;
}
else
{
ulong
low = 0, high = mid;
while
(low <= high) {
mid = low + (high - low) / 2;
ulong
curr
= (arr[mid] * (mid + 1) - cumarr[mid])
* A
+ (cumarr[N - 1] - cumarr[mid]
- (arr[mid] * (N - 1 - mid)))
* B;
if
(curr <= ans) {
ans = curr;
high = mid - 1;
}
else
low = mid + 1;
}
return
ans;
}
}
public
static
void
Main()
{
ulong
[] arr = { 2, 5, 6, 9, 10, 12, 15 };
ulong
A = 1, B = 2;
ulong
N = (
ulong
)(arr.Length);
Console.Write(minCost(arr, A, B, N));
}
}