題目鏈接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26408
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef unsigned long long ll;
const int N=100010;
const int mod=1000000007;
ll p[N];
int a[N];
int n;
void init() {
p[0]=1;
for(int i=1; i<N; i++)p[i]=p[i-1]*2%mod;
}
int main() {
int t;
init();
cin>>t;
while(t--) {
scanf("%d",&n);
int mi=1001000,ma=-1;
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
mi=min(mi,a[i]);
ma=max(ma,a[i]);
}
if(mi==ma) {
printf("%lld %lld\n",(ll)n*(n+1)/2%mod,(ll)(p[n]-1+mod)%mod);
continue;
}
int l=-1,r=-1,k=0;
bool fa=0,fi=0;
ll ans=0;
for(int i=1; i<=n; i++) { ///連續的
if(a[i]==mi||a[i]==ma) {
if(l==-1)l=i;
else if(a[l]==a[i])l=i;
else r=i;
if(a[i]==mi)fi=1;
else fa=1;
}
if(fa&&fi) {
ans=(ans+(ll)(n-r)*(l-1-k)%mod+1+(n-r)+(l-1-k))%mod;
if(a[l]==mi)fi=0;
else fa=0;
k=l;
l=r;
continue;
}
}
sort(a+1,a+n+1);
ll res=0;
int i=2,ii=1;
while(i<n&&a[i]==a[1])i++,ii++;
int j=n-1,jj=1;
while(a[j]==a[n]&&j>=1)j--,jj++;
res=(p[ii]-1)*(p[jj]-1)%mod*(p[n-jj-ii])%mod;///不連續的
printf("%lld %lld\n",ans,res);
}
return 0;
}