被卡常的沒有一絲絲防備。。。要ac可以試着特判一下1 sum之類的。。。
#include <cstdio>
#include <cmath>
#include <ctime>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include<map>
#include <vector>
#define pb push_back
#define forup(i,a,b) for(int i=(a);i<=(b);i++)
#define fordown(i,a,b) for(int i=(a);i>=(b);i--)
#define maxn 100005
#define maxm 100005
#define INF 1070000000
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template<class T> inline
void read(T& num){ num = 0; bool f = true;char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = false;ch = getchar();} while(ch >= '0' && ch <= '9') {num = num * 10 + ch - '0';ch = getchar();} num = f ? num: -num; }
int out[100];
template<class T> inline
void write(T x,char ch){ if (x==0) {putchar('0'); putchar(ch); return;} if (x<0) {putchar('-'); x=-x;}int num=0; while (x){ out[num++]=(x%10); x=x/10;} fordown(i,num-1,0) putchar(out[i]+'0'); putchar(ch); }
/*==================split line==================*/
int n;
ll sum[maxn];
ll a[maxn];
map<ll,int> ans;
map<ll,int> gcd;
void solve(ll x)
{ gcd.clear();
forup(i,1,n) gcd[sum[i]%x]++;
int cmax=0;
for(map<ll,int>::iterator i=gcd.begin();i!=gcd.end();i++)
cmax=max(i->second,cmax);
ans[x]=cmax;
}
int main()
{cin>>n;
forup(i,1,n) read(a[i]),sum[i]=sum[i-1]+a[i];
ll p=sum[n];
for(ll i=1;i*i<=p;i++)
{if(p%i==0)
{solve(i);
if(i*i!=p) solve(p/i);
}
}
forup(i,1,n)
{ ll cmax=0;
for(map<ll,int>::iterator j=ans.begin();j!=ans.end();j++)
{ if(j->second>=i) cmax=max(cmax,j->first);
}
cout<<cmax<<endl;
}
return 0;
}