写的dfs疯狂超时/(ㄒoㄒ)/~~
用了set排除重复计算的元素;
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lowbit(x) x&(-x)
#define N 200005
#define M 1005
#define MOD 1000000007
int t;
int n;
int ans ;
unordered_set<int>ck;
int finds(int a,int b){
return a*(a-1)/2+b+1;
}
void ddfs(int i ,int k){
if (k==1){
return;
}
if (i==0){
int lst = 0;
int tis = finds(k-1,lst);
if (ck.count(tis)<=0){
ck.insert(tis);
ans+=tis*tis;
}
ddfs(lst,k-1);
}
else if (i == k-1){
int lst = k-2;
int ls =finds(k-1,lst);
if (ck.count(ls)<=0){
ck.insert(ls);
ans+=ls*ls;
ddfs(lst,k-1);
}
}
else{
int lst = i;
int ls =finds(k-1,lst);
if(ck.count(ls)<=0){
ck.insert(ls);
ans+=ls*ls;
ddfs(lst,k-1);
}
lst=i-1;
ls=finds(k-1,lst);
if(ck.count(ls)<=0){
ck.insert(ls);
ans+=ls*ls;
ddfs(lst,k-1);
}
}
}
void solve()
{
ans=0;
ck.clear();
cin>>n;
// if (n==1000000){
// cout<<58116199242129511<<endl;
// return;
// }
int p=1;
int r =1;
if (n ==1){
cout<<1<<endl;
return;
}
for (int i = 1; i < 2024; ++i) {
p+=i;
r++;
if (p+i+1>n){
break;
}
}
ck.insert(n);
ans+=n*n;
ddfs(n-p,r);
cout<<ans<<endl;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> t;
while (t--) {
solve();
}
return 0;
}