解析
分为正负数,正数从大到小每次取两个,负数从小到大每次取两个
并且特殊处理,正负数各剩下一个,并且没有0的情况
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 0x3f3f3f3f
const int mod=1e9+7;
const int N=2e5+5;
int n,m;
int a[N];
void solve(){
cin>>n;
vector<int>a,b;
int cnt=0;
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(x>0) a.push_back(x);
else if(x<0) b.push_back(x);
else cnt++;
}
int ans=0;
sort(a.begin(),a.end());
for(int i=a.size()-1;i>=0;i-=2){
if(i==0) break;
ans+=a[i]*a[i-1];
}
sort(b.begin(),b.end());
for(int i=0;i<b.size();i+=2){
if(i==b.size()-1) break;
ans+=b[i]*b[i+1];
}
if(a.size()%2&&b.size()%2&&cnt==0){
ans+=a[0]*b[b.size()-1];
}
cout<<ans<<endl;
}
signed main(){
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
// cout.tie(nullptr);
int tt=1;
cin>>tt;
while(tt--) solve();
return 0;
}