首页 > 代码库 > BZOJ 4052 Magical GCD
BZOJ 4052 Magical GCD
前缀有log个gcd,用代码中的方法来将nlog^3n优化为nlog^2n。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 100050 using namespace std; long long t,n,a[maxn],tot[maxn],f[maxn][50],g[maxn][50],ans=0; long long gcd(long long a,long long b) { if (b==0) return a; return gcd(b,a%b); } void work() { memset(tot,0,sizeof(tot)); scanf("%lld",&n); for (long long i=1;i<=n;i++) scanf("%lld",&a[i]); for (long long i=1;i<=n;i++) { for (long long j=1;j<=tot[i-1];j++) { long long now=gcd(a[i],f[i-1][j]); if (now!=f[i][tot[i]]) { f[i][++tot[i]]=now; g[i][tot[i]]=g[i-1][j]; } } if (a[i]!=f[i][tot[i]]) { f[i][++tot[i]]=a[i]; g[i][tot[i]]=i; } } ans=0; for (long long i=1;i<=n;i++) for (long long j=1;j<=tot[i];j++) ans=max(ans,f[i][j]*(i-g[i][j]+1)); printf("%lld\n",ans); } int main() { scanf("%lld",&t); for (long long i=1;i<=t;i++) work(); return 0; }
BZOJ 4052 Magical GCD
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。