关于我T了80pts,心想 nlogn 随便过,被现实狠狠打脸,于是手动限制 logn 次结果过了?
#include<bits/stdc++.h>
using namespace std;
bool fg = 1;
int a[5000005],ans[5000005];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for(int i = 1;i <= n;++i) cin >> a[i],ans[i] = n - 1;
for(int i = 1;i < n;++i) {
int j = i,minn = a[i];
int gcd = a[i],cnt = 0;
while(1) {
++j,++cnt;
if(j > n || cnt > 15) break;//手动限制
int pre = gcd;
gcd = __gcd(gcd,a[j]);
if(gcd == 1) {
if(minn != gcd) ans[gcd] = n;
break;
}
minn = min(minn,a[j]);
if(minn != gcd) ans[gcd] = n;
}
}
cout << n << " ";
for(int T = 2;T <= n;++T) cout << ans[T] << ' ';
return 0;
}