题意:
n个数,n<=3e5,2^n-1个非空集合 F(a)定义为集合a中最大值-最小值之差 求所有F(a)之和mod1e9+7//sort后 枚举最小值为i,则ans+=(a[j]-a[i])*2^(j-i-1) (j=i+1~n)
//化解:一个数a[i]总共减了:a[i]*(2^0~2^(n-i-1)) 加了a[i]*(2^0+~2^(i-2))
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+20;
const int M=3e5+5;
const ll mod=1e9+7;
ll n,a[N];
ll pw2[N];
int main()
{
pw2[0]=1;
for(int i=1;i<=M;i++)
pw2[i]=(pw2[i-1]*2ll)%mod;
while(cin>>n)
{
for(int i=1;i<=n;i++)
scanf("%I64d",&a[i]);
sort(a+1,a+1+n);
ll ans=0;
for(int i=1;i<=n;i++)
{
ll sub,add;
if(i==n)
sub=0;
else
sub=(a[i]*(pw2[n-i]-1)+mod)%mod;
if(i==1)
add=0;
else
add=(a[i]*(pw2[i-1]-1)+mod)%mod;
ans=(ans-sub+mod)%mod;
ans=(ans+add)%mod;
}
cout<<ans<<endl;
}
return 0;
}