嘛。。。。这个东西比较妙。。。
考虑gcd在逻辑上是什么。。。
然后就可以把这个题轻松解决掉
#include<bits/stdc++.h>
#define MAXN 1000005
using namespace std;
int n,dx[MAXN<<1],now,tot,maxl[MAXN<<1];
map<int,int>q;
int num[MAXN],js[MAXN];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>now;
for(int j=1;j*j<=now;j++){
if(now%j==0){
dx[j]++;
if(now/j!=j)dx[now/j]++;
}
}
}
for(int i=1;i<=MAXN;i++)q[dx[i]] = i;
for(map<int,int>::iterator it = q.begin();it!=q.end();it++){
tot++,num[tot]=it->second,js[tot]=it->first;
}
for(int i=tot;i>=1;i--)maxl[i] = max(maxl[i+1],num[i]);
for(int i=1;i<=n;i++){
int zz = lower_bound(js+1,js+1+tot,i)-js;
cout<<maxl[zz]<<endl;
}
}