通过贪心观察均分的最优性质;常规思路是三分枚举,每次O(n)维护各点权值;
变化属性的加法运算可以通过差分相邻项,对前项 + ,对后项 - 实现变化值的维护;
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int max_n=2e5+5;
int n,b,x,sum[max_n],c[max_n];
int fuck(int ci,int k)
{
int q=ci%k,p=k-q,f=ci/k;
return (f*f*(p-1)*p)/2+((f+1)*(f+1)*(q-1)*q)/2+p*q*f*(f+1);
}
void solve()
{
cin>>n>>b>>x;
int mx=0;
for(int i=1;i<=n;i++){
cin>>c[i];
mx=max(mx,c[i]);
for(int j=1;j<c[i];j++){
int cur=fuck(c[i],j);
sum[j]+=cur;sum[j+1]-=cur;
}
sum[c[i]]+=fuck(c[i],c[i]);
}
int ans=0;
for(int i=1;i<=mx;i++){
sum[i]+=sum[i-1];
ans=max(ans,sum[i]*b-(i-1)*x);
}
cout<<ans<<endl;
for(int i=1;i<=mx;i++)sum[i]=0;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int _t;cin>>_t;
while(_t--){
solve();
}
return 0;
}