CF 264B
简单DP,先把所有的因子预处理出来,然后每次更新就好了
vector<int>fac[MAXN];
void init(){
for(int i=2;i<MAXN;++i){
for(int j=i;j<MAXN;j+=i){
fac[j].push_back(i);
}
}
}
void solve(){
int n;
cin>>n;
vector<int>a(n+1);
map<int,int>dp;
for(int i=1;i<=n;++i){
cin>>a[i];
for(int f:fac[a[i]]){
dp[f]=0;
}
}
for(int i=1;i<=n;++i){
int cur_max=-1;
for(int f:fac[a[i]]){
dp[f]+=1;
cur_max=max(cur_max,dp[f]);
}
for(int f:fac[a[i]]){
dp[f]=max(dp[f],cur_max);
}
}
int ans=1;
for(auto&k:dp){
ans=max(k.second,ans);
}
cout<<ans<<'\n';
return;
}