BZOJ 4052 Magical GCD】的更多相关文章

Description 给出一个长度在\(100000\)以内的正整数序列,大小不超过\(10^{12}\).求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. Input 第一行一个整数\(T\),表示数据组数. 对于每组数据第一行一个整数\(N\),表示序列长度.接下来一行有\(N\)个整数,表示序列中的每个元素. Output 对于每组数据,输出序列中所有连续子段中最大的GCD乘长度. Sample Input 1 5 30 60 20 20 20 Sample…
DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小,至少变成gcd/2(2是最小的质因数),所以是log个左端点…… 所以我们就有了log段!每段的gcd是相同的.当我们加入一个新的右端点时,除了该节点本身外,不会出现新的左端点,原有的左端点可能会不变,或是两(多)段合并成一段,用滚动数组记一下,暴力搞就可以了……$O(n*log^2n)$ Orz…
4052: [Cerc2013]Magical GCD Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 70[Submit][Status][Discuss] Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大.   Input   Output   Sample Input 1 5 30 60…
/** 题目:Magical GCD UVA 1642 链接:https://vjudge.net/problem/UVA-1642 题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大.输出这个最大值. 思路: 从左到右枚举一段连续序列时候,同时不断取gcd,会发现gcd相同的部分. gcd的值会随着长度边长非递增变化.最多logx个不同的gcd.那么对于一个长长的序列. 要是可以将相同gcd的一起处理,那么时间就可以优化. 枚举姿势要正确,保证当前枚举的位置,可以利用前…
[BZOJ4052][Cerc2013]Magical GCD Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. Sample Input 1 5 30 60 20 20 20 Sample Output 80 题解:先思考暴力的做法.我们从一个数开始往左扫,将所有使得gcd改变的位置都记录下来.由于gcd的每次改变都至少/2,所以这样的位置不超过log个. 那么我…
[BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 输入 本题为多组数据. 第一行一个整数 T,表示数据组数. 每组数据第一行为一个整数 n,表示序列长度:第二行为 n 个整数表示序列. 输出 对于每组数据,输出 max{ gcd * length } 输入示例 输出示例 数据规模及约定 见“试题描述” 题解 可以发现…
                              Magical GCD The Magical GCD of a nonempty sequence of positive integers is defined as the product of its lengthand the greatest common divisor of all its elements.Given a sequence (a1, . . . , an), find the largest possibl…
题目 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. 分析 根据暴力的思想, \(枚举i,枚举j,a[j]=gcd(a[j],a[i])\) 答案就是\(max(a[j]*(i-j+1))\) 显然,当\(a[j]=a[j-1]\)的时候,\(a[j]\)就一定不会更新ans,所以,弄个双向链表,把\(a[j]\)踢掉. #include <cmath> #include &l…
BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^{12}\). \(Solution\) gcd有结合律,而且gcd每次改变至少会变小两倍,而且只会减小. 所以对于每个右端点,可以暴力维护每种gcd出现的最靠前的位置(只有\(log\)种gcd). 详细一点就是这样的: 枚举右端点\(i\). 栈里现在维护的是右端点为\(i-1\)时,每种\(\…
以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<algorithm> #include<cmath> #define N 300010 using namespace std; int n,i,Log[N],j,l,left,right,mid; ],ans; long long gcd(long long a,long long b) {…