添加链接描述
首先排序对结果不影响 然后先分析取最大值时,最小值类似
当取当前第i个数,那么这个数作为最大值,首先可以保证i+1~~n不取,所以取前1~i个数,那么可以发现有2^(i-1)可能取法 所以结果就是res=res*arr(i)2 ^n-1; 要采用欧拉降幂消指数
ab%p 当a与p互质时 b%=p-1;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+9;
ll q_pow(ll a,ll b,ll mod){
ll res=1;
while(b){
if(b&1)res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
ll arr[N],res=1;
int main(){
int n;
cin>>n;
ll mod=1e9+7;
for(int i=1;i<=n;i++)cin>>arr[i];
sort(arr+1,arr+1+n);
for(int i=1;i<=n;i++){
res=res*q_pow((arr[i]),q_pow(2,i-1,mod-1)%mod,mod)%mod;
}
for(int i=1;i<=n;i++){
res=res*q_pow((arr[i]),q_pow(2,n-i,mod-1)%mod,mod)%mod;
}
cout<<res<<endl;
return 0;
}