/**
题目:Magical GCD UVA 1642
链接:https://vjudge.net/problem/UVA-1642
题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
思路:
从左到右枚举一段连续序列时候,同时不断取gcd,会发现gcd相同的部分。
gcd的值会随着长度边长非递增变化。最多logx个不同的gcd。那么对于一个长长的序列。
要是可以将相同gcd的一起处理,那么时间就可以优化。 枚举姿势要正确,保证当前枚举的位置,可以利用前面的结果。
常规枚举姿势,右边界位置从左到右枚举,然后枚举左边界位置j<=i从右往左枚举。
用d,l两个数组存储信息。
ll d[maxn];//d[i]表示到达i这个位置的最大公约数
ll l[maxn];//l[i]表示i这个位置到l[i]这个位置的最大公约数相同。
*/ #include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<set>
#include<cmath>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
ll d[maxn];//d[i]表示到达i这个位置的最大公约数
ll l[maxn];//l[i]表示i这个位置到l[i]这个位置的最大公约数相同。
int T, n;
ll a[maxn];
ll GCD(ll a,ll b)
{
return b==?a:GCD(b,a%b);
}
int main()
{
cin>>T;
while(T--)
{
scanf("%d",&n);
for(int i = ; i <= n; i++) scanf("%lld",&a[i]); ll ans = ;
for(int i = ; i <= n; i++){
d[i] = a[i];
l[i] = i;
ll gcd = a[i];
ll pos = l[i];
ll lastpos = pos;
ans = max(ans,a[i]);
pos--;
while(pos>=){
pos = l[pos];
ll gcdl = GCD(gcd,d[pos]);
ans = max(ans,gcdl*(i-pos+));
if(gcdl==gcd){
l[lastpos] = pos;
d[pos] = gcdl;
}else
{
gcd = gcdl;
lastpos = pos;
d[pos] = gcdl;
}
pos--;
}
}
printf("%lld\n",ans);
}
return ;
}

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

  1. UVA 1363 Joseph's Problem 找规律+推导 给定n,k;求k%[1,n]的和。

    /** 题目:Joseph's Problem 链接:https://vjudge.net/problem/UVA-1363 题意:给定n,k;求k%[1,n]的和. 思路: 没想出来,看了lrj的想 ...

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

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

  3. UVa 1642 (综合) Magical GCD

    题意: 给出一个数列,求一个连续的子序列,使得MGCD(i, j) =  该子序列的长度(j-i+1) × 子序列的gcd 最大,并输出这个最大值. 分析: 感觉可能要用优先队列,但貌似也用不上. 但 ...

  4. UVa 1642 - Magical GCD(数论)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVA 1642 Magical GCD(经典gcd)

    题意:给你n(n<=100000)个正整数,求一个连续子序列使序列的所有元素的最大公约数与个数乘积最大 题解:我们知道一个原理就是对于n+1个数与n个数的最大公约数要么相等,要么减小并且减小至少 ...

  6. UVA - 1642 Magical GCD 数学

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

  7. uva 1642 Magical GCD

    很经典的题目,愣是没做出来.. 题意:给出一个序列,求一子序列,满足其GCD(子序列)* length(子序列)最大. 题解: 类似单调队列的思想,每次将前面所得的最大公约数与当前数进行GCD,若GC ...

  8. UVa 1642 Magical GCD (暴力+数论)

    题意:给出一个长度在 100 000 以内的正整数序列,大小不超过 10^ 12.求一个连续子序列,使得在所有的连续子序列中, 它们的GCD值乘以它们的长度最大. 析:暴力枚举右端点,然后在枚举左端点 ...

  9. python应用-输入三个数,输出其最大值

    """ 输入三个数,输出其最大值 Author:罗万财 Date:2017-7-6 """ a=int(input('a=')) b=int ...

随机推荐

  1. C#分析URL参数获取参数和值得对应列表(二)

    不错博客: [C#HttpHelper]官方产品发布与源码下载---苏飞版http://www.sufeinet.com/thread-3-1-1.html http://blog.csdn.net/ ...

  2. 分析器错误 未能加载类型“XX.WebApiApplication”

    解决方案,删除bin目录下内容(有单独使用dll的删除前请先备份) 清理解决方案并重新生成

  3. Zookeeper的功能以及工作原理(转)

    本文转自https://www.cnblogs.com/felixzh/p/5869212.html Zookeeper的功能以及工作原理   1.ZooKeeper是什么?ZooKeeper是一个分 ...

  4. system表空间爆满解决方法

      分类: Oracle 问题描述: 对数据库做检查,发现system表空间持续占满99%.使用如下语句查看: SQL> select b.tablespace_name "表空间&q ...

  5. js数据加载完成的方法

    1.document.onreadystatechange(页面加载完成的方法)配合document.readyState(获取加载状态)使用 document.onreadystatechange= ...

  6. JSON和XML的区别

  7. IE11快捷键 双击没反应的解决办法

    WIN + R,regedit,找到 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 对左侧树Main节点右键——权限. 正常情 ...

  8. linux中查找文件属于那个软件包的方法

    一.linux中查找文件属于那个软件包的方法 [root@salt prod]# whereis htpasswdhtpasswd: /usr/bin/htpasswd /usr/share/man/ ...

  9. 两列布局(浮动、定位、flex)和三列布局(圣杯、双飞翼、flex)

    demo 各种布局演示 https://jsfiddle.net/mayufo/qp890peq/1/ 两栏布局 浮动 <div class="box1"> <d ...

  10. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何获取标准驱动器扭矩值获取电流值

    双击某个驱动器(以松下伺服驱动器为例),在Process Data中,注意默认显示了PDO mapping1的数据(Error code, status word等)   注意左侧,2和3分别表示了与 ...