分析:对于区间[i,j],枚举j。

固定j以后,剩下的要比较M_gcd(k,j) = gcd(ak,...,aj)*(j-k+1)的大小, i≤k≤j。

此时M_gcd(k,j)可以看成一个二元组(g, k)。

根据gcd的性质gcd(a1,a2,...,an) = gcd(a1,gcd(a2,..,an)),而且gcd(a,b) | b。

如果gcd(ak,...,aj) != gcd(ak+1,...,aj),那么gcd(ak,...,aj) ≤ 2*gcd(ak+1,...,aj)。

原本有j个gcd,而不同的gcd值之间至少相差2倍,所以不同的gcd值的数量是O(log2j)。

gcd相同的只要保留最小的k。

把j-1对应的M_gcd的二元组保留成一个表tb。然后想想怎么递推j的表,

根据gcd(a1,a2,...,aj) = gcd(gcd(a1,..aj-1),aj),一部分是tbj.g =  gcd(tbj-1.g,a[j]),下标没有改变,

另一部分是二元组(a[j],j)。一个有序序列依次和a[j]求gcd以后不一定有序了,去重复前还要排下序。

总的复杂度是O(nlogn*loglogn )

/*********************************************************
* --------------Crispr--------------- *
* author AbyssalFish *
**********************************************************/
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
//list<ll> gcd_tab;
//ll g_tb[64];
//int idx[64];
typedef pair<ll,int> pli;
pli tb[]; int sz; ll gcd(ll a,ll b)
{
ll t;
while(b){
t = b;
b = a%b;
a = t;
}
return a;
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T , n;
scanf("%d",&T);
ll a;
while(T--){
scanf("%d",&n);
sz = ;
ll ans = ; #define val first
#define idx second
for(int i = ; i < n; i++){
scanf("%lld",&a);
for(int j = ; j < sz; j++){
tb[j].val = gcd(tb[j].val,a);
}
tb[sz++] = pli(a,i-);
sort(tb,tb+sz);
int k = ;
for(int j = ; j < sz; j++){
if(tb[j].val != tb[k].val){
ans = max((i-tb[k].idx)*tb[k].val, ans);
if(++k != j) tb[k] = tb[j];
}
}
ans = max((i-tb[k].idx)*tb[k].val, ans);
sz = k+;
}
printf("%lld\n", ans);
}
return ;
}

UVA 1642 Magical GCD(gcd的性质,递推)的更多相关文章

  1. UVa 11077 Find the Permutations(置换+递推)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35431 [思路] 置换+递推 将一个排列看作一个置换,分解为k个循 ...

  2. UVA 1213 - Sum of Different Primes(递推)

    类似一个背包问题的计数问题.(虽然我也不记得这叫什么背包了 一开始我想的状态定义是:f[n = 和为n][k 个素数]. 递推式呼之欲出: f[n][k] = sigma f[n-pi][k-1]. ...

  3. UVa 1642 - Magical GCD(数论)

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

  4. UVA - 1642 Magical GCD 数学

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

  5. uva 1642 Magical GCD

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

  6. UVA 1642 Magical GCD(经典gcd)

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

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

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

  8. uva 11426 线性欧拉函数筛选+递推

    Problem J GCD Extreme (II) Input: Standard Input Output: Standard Output Given the value of N, you w ...

  9. UVA 550 Multiplying by Rotation (简单递推)

    题意:有些数字是可以这样的:abcd*k=dabc,例如179487 * 4 = 717948,仅仅将尾数7移动到前面,其他都不用改变位置及大小.这里会给出3个数字b.d.k,分别代表b进制.尾数.第 ...

随机推荐

  1. c++常考算法知识点汇总

    前言:写这篇博客完全是给自己当做笔记用的,考虑到自己的c++基础不是很踏实,只在大一学了一学期,c++的面向对象等更深的知识也一直没去学.就是想当遇到一些比较小的知识,切不值得用一整篇 博客去记述的时 ...

  2. 整合spring和hibernate框架

    一)整合spring和hibernate框架整合要点:(1)数据源配置在Spring的配置文件中,供Spring和Hibernate框架共同使用:(2)不再需要hibernate.hbm.xml配置文 ...

  3. 离散数学——python实现真值表和打印主范式

    最近用python实现了真值表,经过有点儿曲折,刚开始没考虑优先级,直到前天才发现这个问题(离散数学没学好啊),用栈改了一下.话说python就是强,把列表类型当栈用,直接调用列表的pop()和app ...

  4. Jmeter分布式(转)jmeter -n -t baidu.jmx -l result.jtl -R 172.16.20.146:1099

    1.准备2台在同一个局域网内的机器,一台作为master主控机,一台作为slave 执行机 master机器ip:172.16.20.134 slave机器ip:172.16.20.146 2.在2台 ...

  5. POJ1047 Round and Round We Go

    题目来源:http://poj.org/problem?id=1047 题目大意: 有一些整数具有这样的性质:它的位数为n,把它和1到n的任意一个整数相乘结果的数字会是原数字的一个“环”.说起来比较抽 ...

  6. Keepalived + Nginx + Tomcat 高可用负载均衡架构

    环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...

  7. docker镜像的分层结构三

    docker的镜像分层 docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构. 实验 比如说使用dockerfile去创建一个最简单的hello镜像.创建好对应的d ...

  8. Chapter10

    package scala import java.io.{PrintStream, PrintWriter}import java.util.Date import scala.util.loggi ...

  9. Linux重新挂载磁盘

    Linux下磁盘和目录的概念与WIN不同:比如,分了一个系统分区默认挂载了根(/)目录,根下还有其它目录,比如/user /lib等.如果系统分区不够用,可以再分出分支,把根下其它目录分别挂载出来,例 ...

  10. TortoiseSVN 控制图标未显示或显示异常解决方法