思路:
先快排,然后用公式计算出总的volume值。
#include <stdio.h>
typedef unsigned __int64 u64;
__inline void swap(u64 *a, u64 *b)
{
u64 t = *a;
*a = *b;
*b = t;
}
void qs(u64 *arr, int len)
{
int p, r, l;
if (len < 2)
return ;
l = 0;
r = len - 2;
p = len - 1;
while (1) {
while (l < p && arr[l] < arr[p])
l++;
while (r >= 0 && arr[r] >= arr[p])
r--;
if (l > r)
break;
swap(&arr[l], &arr[r]);
}
swap(&arr[l], &arr[p]);
qs(arr, l);
qs(arr + l + 1, len - l - 1);
}
u64 in[10024];
int N;
int main()
{
int i;
u64 s;
freopen("e:\\test\\in.txt", "r", stdin);
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf("%llu", &in[i]);
qs(in, N);
s = 0;
for (i = 1; i <= N - 1; i++)
s += 2 * i * (N - i) * (in[i] - in[i - 1]);
printf("%llu\n", s);
return 0;
}