Description

给出一个长度在\(100000\)以内的正整数序列,大小不超过\(10^{12}\)。求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大。

Input

第一行一个整数\(T\),表示数据组数。

对于每组数据第一行一个整数\(N\),表示序列长度。接下来一行有\(N\)个整数,表示序列中的每个元素。

Output

对于每组数据,输出序列中所有连续子段中最大的GCD乘长度。

Sample Input

1

5

30 60 20 20 20

Sample Output

80

HINT

\(N \le 100000\)

由于gcd每次变化至少减少一半,序列中本质不同的gcd子段只有\(O(nlogn)\)个。对于每个位置\(i\),我们枚举一个gcd值d,二分出一个最小的\(j\)使得\(gcd_{seq_{j \sim i}} = d\)。这个可以用ST表实现,复杂度\(O(nlog^{2}n) \times O(gcd)\)。

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std; typedef long long ll;
#define maxn (100010)
ll rmq[20][maxn]; int N,bit[maxn*2]; inline ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } inline ll query(int l,int r)
{
int len = r-l+1;
return gcd(rmq[bit[len]][l],rmq[bit[len]][r-(1<<bit[len])+1]);
} inline ll work()
{
ll ret = 0;
for (int i = 1;i <= N;++i)
{
ll now = rmq[0][i];
for (int last = i,l,r,mid;last;)
{
l = 1,r = last;
while (l <= r)
{
mid = (l + r) >> 1;
if (query(mid,i) != now) l = mid + 1;
else r = mid - 1;
}
ret = max(ret,(i-r)*now);
if (r) now = gcd(now,rmq[0][r]); last = r;
}
}
return ret;
} int main()
{
freopen("4052.in","r",stdin);
freopen("4052.out","w",stdout);
for (int i = 1;(1<<i)<=200000;++i) for (int j = 1<<(i-1);j < (1<<i);++j) bit[j] = i-1;
int T; scanf("%d",&T);
while (T--)
{
scanf("%d",&N);
for (int i = 1;i <= N;++i) scanf("%lld",rmq[0]+i);
for (int i = 1;(1 << i) <= N;++i)
for (int j = 1;j+(1<<i)-1 <= N;++j) rmq[i][j] = gcd(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
printf("%lld\n",work());
}
fclose(stdin); fclose(stdout);
return 0;
}

BZOJ 4052 Magical GCD的更多相关文章

  1. 【BZOJ】【4052】【CERC2013】Magical GCD

    DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小 ...

  2. 4052: [Cerc2013]Magical GCD

    4052: [Cerc2013]Magical GCD Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 70[Submit][ ...

  3. Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。

    /** 题目:Magical GCD UVA 1642 链接:https://vjudge.net/problem/UVA-1642 题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量 ...

  4. 【BZOJ4052】[Cerc2013]Magical GCD 乱搞

    [BZOJ4052][Cerc2013]Magical GCD Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续 ...

  5. [BZOJ4052][Cerc2013]Magical GCD

    [BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们 ...

  6. UVA - 1642 Magical GCD 数学

                                  Magical GCD The Magical GCD of a nonempty sequence of positive integer ...

  7. 【NOIP2014模拟8.17】Magical GCD

    题目 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. 分析 根据暴力的思想, \( ...

  8. BZOJ.4052.[Cerc2013]Magical GCD(思路)

    BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...

  9. BZOJ 4052: [Cerc2013]Magical GCD

    以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...

随机推荐

  1. [ES7] Descorator: evaluated & call order

    When multiple decorators apply to a single declaration, their evaluation is similar to function comp ...

  2. onInterceptTouchEvent和onTouchEvent调用时序

    onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,A ...

  3. mvvm框架下页面与ViewModel的各种参数传递方式

    传单个参数的话在xaml用     Command={Binding ViewModel的事件处理名称}    CommandParameter={Binding 要传递的控件名称} ViewMode ...

  4. CentOS7上Nginx的使用

    Nginx 的启动 指定配置文件的方式启动nginx # nginx -c /etc/nginx/nginx.conf 对于yum安装的nginx,使用systemctl命令启动 # systemct ...

  5. winform windowsmediaplayer的属性

    首先将C:\WINDOWS\system32下的wmp.dll应用到项目中: WMPLib.WindowsMediaPlayerClass player = new WMPLib.WindowsMed ...

  6. React+Immutable.js的心路历程

    这段时间做的项目开发中用的是React+Redux+ImmutableJs+Es6开发,总结了immutable.js的相关使用姿势: Immutable Data 顾名思义是指一旦被创造后,就不可以 ...

  7. [DEncrypt] DESEncrypt--加密/解密帮助类 (转载)

    点击下载 DESEncrypt.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.DESEncrypt加密2.DESEncrypt解密看下面代码吧 /// <summary> / ...

  8. XmlHttpRequest 使用

    1. IE7以后对xmlHttpRequest 对象的创建在不同浏览器上是兼容的.下面的方法是考虑兼容性的,实际项目中一般使用Jquery的ajax请求,可以不考虑兼容性问题. function ge ...

  9. “jni.h”: No such file or directory

    VS2010解决方案: 进入 “包含目录“ 方式: 右键项目属性页-> 配置属性->VC++目录->包含目录 在”包含目录“中编辑 添加以下路径: C:\Program Files\ ...

  10. 动效解析工厂:Mask 动画

    转载自:http://www.cocoachina.com/ios/20160214/15250.html 前言:很多动效都是多种动画的组合,有时候你可能只是需要其中某个动画,但面对庞杂的代码库或是教 ...