与其直接求答案
不如直接算当前的数作为最大值的贡献,与这个数作为最小值的贡献
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int mod=1e9+7;
int n;
int a[1000005];
long long ans;
long long qkpow(int a,int b)
{
if(b==0)
return 1;
if(b==1)
return a;
int t=qkpow(a,b/2);
t=(t*t)%mod;
if(b%2==1)
t=(t*a)%mod;
return t;
}
signed main()
{
ios::sync_with_stdio(false);
//freopen("d.in","r",stdin);
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
ans=(((ans+a[i]*qkpow(2,i-1)%mod)%mod-a[i]*qkpow(2,n-i)%mod)%mod+mod)%mod;
}
cout<<ans;
return 0;
}
原文:https://www.cnblogs.com/loney-s/p/11861938.html