解析:
遍历因子,然后前缀和判断找出最大值即可。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,a[N],sum[N];
int func(int k){
int maxx=0,minn=0x3f3f3f3f3f3f3f3f;
for(int i=1;i<=n;i+=k){
maxx=max(maxx,sum[i+k-1]-sum[i-1]);
minn=min(minn,sum[i+k-1]-sum[i-1]);
}
// cout<<maxx<<" "<<minn<<" "<<maxx-minn<<endl;
return maxx-minn;
}
void solve(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
sum[i]=sum[i-1]+a[i];
}
int res=0;
for(int i=1;i<=n/i;i++){
if(n%i==0){
int k=n/i;
res=max(res,func(k));
if(i!=k) res=max(res,func(i));
}
}
printf("%lld\n\n",res);
}
signed main(){
int t=1;
scanf("%d",&t);
while(t--) solve();
return 0;
}