给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列
{Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ∗ gcd (Al..Ar)。 
JYY 希望找出权值最大的子序列。

Input

输入一行包含一个正整数 N。
接下来一行,包含 N个正整数,表示序列Ai
1 < =  Ai < =  10^12, 1 < =  N < =  100,000

Output

输出文件包含一行一个正整数,表示权值最大的子序列的权值。

Sample Input5
30 60 20 20 20

Sample Output80
//最佳子序列为最后 4 个元素组成的子序列

题意:求最大的ans=区间长度*区间最大公约数。

思路:我们考虑到gcd的个数是log级别的,我们对于每个gcd,记录第一个位置即可,开始以为是分治求,这是显然可以的。但事实上没有必要,我们从前向后扫描,当扫描到a[i]时,对于之前的所有gcd,用其第一次出现的位置更新一遍答案,同时把每个gcd和a[i]求gcd,如果第一次出现,则记录其对应位置。

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. const int maxn=;
  5. map<ll,int>mp,tp;
  6. map<ll,int>::iterator it;
  7. int main()
  8. {
  9. int N,i; ll x,ans=;
  10. scanf("%d",&N);
  11. for(i=;i<=N;i++){
  12. scanf("%lld",&x); ans=max(ans,x);
  13. for(it=mp.begin();it!=mp.end();it++){
  14. ll g=__gcd(x,(*it).first);
  15. ans=max(ans,(ll)(i-(*it).second+)*g);
  16. if(tp.find(g)==tp.end()) tp[g]=(*it).second;
  17. }
  18. if(tp.find(x)==tp.end()) tp[x]=i;
  19. mp=tp; tp.clear();
  20. }
  21. printf("%lld\n",ans);
  22. return ;
  23. }

BZOJ-4488:最大公约数(GCD)的更多相关文章

  1. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  2. 1011 最大公约数GCD

    1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用空格隔开.(1<= A,B < ...

  3. 51Nod--1011最大公约数GCD

    1011 最大公约数GCD 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入2个正整数A,B,求A与B的最大公约数. Input 2个数A,B,中间用 ...

  4. 最大公约数(GCD)与最小公倍数(LCM)的计算

    给出两个数a.b,求最大公约数(GCD)与最小公倍数(LCM) 一.最大公约数(GCD)    最大公约数的递归:  * 1.若a可以整除b,则最大公约数是b  * 2.如果1不成立,最大公约数便是b ...

  5. [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)

    [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...

  6. BZOJ 4488: [Jsoi2015]最大公约数 暴力 + gcd

    Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列 {Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L, ...

  7. BZOJ 4028: [HEOI2015]公约数数列 【分块 + 前缀GCD】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=4028 4028: [HEOI2015]公约数数列 Time Limit: 10 Sec   ...

  8. bzoj 4488 [Jsoi2015]最大公约数 结论+暴力

    [Jsoi2015]最大公约数 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 302  Solved: 169[Submit][Status][Dis ...

  9. [BZOJ 4488][Jsoi2015]最大公约数

    传送门 不知谁说过一句名句,我们要学会复杂度分析 #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for( ...

  10. BZOJ 4488/4052 gcd

    思路: 一开始 我是想 对于固定的左端点 从左到右 最多有 log种取值  且单调递减  那不妨倍增预处理+二分GCD在哪变了.. 复杂度O(nlog^2n) gcd最多log种取值.. 好了我们可以 ...

随机推荐

  1. 【jQuery】方法和选择器的双重使用详解

    1.jQuery选择直接子节点+除了某个元素 1>方法 $(".begon").children(".row:not(.moreDetail)") 2&g ...

  2. weblogic92 启动慢解决办法

      使用SUN JDK 启动时要很长时间,但启动启来weblogic正常. 特征见下面标红部分,时间很长. test01@linux-suse:~/bea/weblogic92/samples/dom ...

  3. [反汇编练习] 160个CrackMe之036

    [反汇编练习] 160个CrackMe之036. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  4. android wifi state and wifi ap state

    /** * Wi-Fi is currently being disabled. The state will change to {@link #WIFI_STATE_DISABLED} if * ...

  5. 一起talk C栗子吧(第八十四回:C语言实例--使用信号进行进程间通信一)

    各位看官们,大家好,上一回中咱们说的是进程间通信的样例.这一回咱们说的样例是:使用信号进行进程间通信.闲话休提,言归正转. 让我们一起talk C栗子吧! 我们在上一回中提到过进程之间通信须要解决的三 ...

  6. hdu 1548

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  7. C++类的大小(转)

    一个空类class A{};的大小为什么是1,因为如果不是1,当定义这个类的对象数组时候A objects[5]; objects[0]和objects[1]就在同一个地址处,就无法区分. 单继承 # ...

  8. 为什么应使用 Node.js

    为什么应使用 Node.js JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也可以在服务器上运行 JavaScrip ...

  9. lockfile - conditional semaphore-file creator

    LOCKFILE(1) LOCKFILE(1) NAME lockfile - conditional semaphore-file creator SYNOPSIS lockfile -sleept ...

  10. UVA 11888 - Abnormal 89&#39;s(Manachar)

    UVA 11888 - Abnormal 89's option=com_onlinejudge&Itemid=8&page=show_problem&category=524 ...