题意:
给一个序列a[1],a[2],a[3]...a[n],求其中连续的子序列A[L],A[L+1],...,A[R],使其权值 W(L,R)=(R-L+1)×gcd(A[L],...,A[R])最大。
输入格式
输入一行包含一个正整数n
接下来一行,包含N个正整数,
表示序列A_i
输出格式
输出文件包含一行一个正整数,表示权值最大的子序列的权值。
输入 #1
5
30 60 20 20 20
输出 #1
80
说明/提示
1≤Ai≤10^12,1≤N≤100000
可知一个数的质因数个数最多为logai次
那么对ai与其他a取gcd,最多有logai个值
那么记录下j的最左端点,使任意gcd(a_(j+k),...a_i)相同
算上求gcd,复杂度为O(nlog^2n)
 
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
int n,cnt[];
lol Gcd[][];
int lst[][];
lol a[];
lol ans;
lol gcd(lol a,lol b)
{
if (!b) return a;
return gcd(b,a%b);
}
lol max(lol a,lol b)
{
if (a>b) return a;
return b;
}
int main()
{int i,j;
cin>>n;
for (i=;i<=n;i++)
scanf("%lld",&a[i]);
for (i=;i<=n;i++)
{
cnt[i]=;
Gcd[i][cnt[i]]=a[i];
lst[i][cnt[i]]=i;
ans=max(ans,a[i]);
for (j=;j<=cnt[i-];j++)
{
cnt[i]++;
Gcd[i][cnt[i]]=gcd(Gcd[i][cnt[i]-],Gcd[i-][j]);
lst[i][cnt[i]]=lst[i-][j];
ans=max(ans,(lol)(i-lst[i][cnt[i]]+)*Gcd[i][cnt[i]]);
if (Gcd[i][cnt[i]]==Gcd[i][cnt[i]-])
{
cnt[i]--;
lst[i][cnt[i]]=lst[i-][j];
}
}
}
cout<<ans;
}
 
 

[JSOI2015]最大公约数的更多相关文章

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

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

  2. BZOJ4488: [Jsoi2015]最大公约数

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

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

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

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

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

  5. BZOJ4488 JSOI2015最大公约数

    显然若右端点确定,gcd最多变化log次.容易想到对每一种gcd二分找最远端点,但这样就变成log^3了.注意到右端点右移时,只会造成一些gcd区间的合并,原本gcd相同的区间不可能分裂.由于区间只有 ...

  6. 洛谷 P5502 - [JSOI2015]最大公约数(区间 gcd 的性质+分治)

    洛谷题面传送门 学校模拟赛的某道题让我联想到了这道题-- 先讲一下我的野鸡做法. 首先考虑分治,对于左右端点都在 \([L,R]\) 中的区间我们将其分成三类:完全包含于 \([L,mid]\) 的区 ...

  7. 2018年长沙理工大学第十三届程序设计竞赛 I 连续区间的最大公约数

    连续区间的最大公约数 思路:参照BZOJ 4488: [Jsoi2015]最大公约数脑补出的一个\(map\)套\(vector\)的写法,写起来比线段树短,运行时间比线段树快. 代码: #pragm ...

  8. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. Linux下zookeeper单机版详细安装

    Linux下zookeeper单机版详细安装 1.zookeeper简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop ...

  2. html5 iframe

    html5 iframe元素:用于在网页中嵌入另一个页面,或嵌入视频 可替换元素 显示内容取决于元素属性 css不能完全控制其中样式 通常是行内块盒子 <a href="" ...

  3. gitlab-runner 安装使用

    gitlab-runner 安装使用 gitlab-runner 是一个开源的与 gitlab CI 配合使用的项目,用于运行任务,并将结果返回 gitlab 本文通过docker in docker ...

  4. golang---获取windows系统相关信息

    package main import ( "fmt" "net" "runtime" "strings" " ...

  5. 广度优先搜索(BFS)思路及算法分析

    1.算法用途: 是一种图像搜索演算法.用于遍历图中的节点,有些类似于树的深度优先遍历.这里唯一的问题是,与树不同,图形可能包含循环,因此我们可能会再次来到同一节点. 2.主要思想: 主要借助一个队列. ...

  6. Swift之xib模块化设计

    一.解决问题 Xib/Storybarod可以方便.可视化的设置约束,在开发中也越来越重要.由于Xib不能组件化,使得封装.重用都变得不可行.本文将介绍一种解决方案,来实现Xib组件化. 二.模型块原 ...

  7. 【转载】C#中通过Distinct方法对List集合进行去重

    在C#的List集合对象中,可以使用Distinct方法来对List集合元素进行去重,如果list集合内部元素为值类型,则Distinct方法根据值类型是否相等来判断去重,如果List集合内部元素为引 ...

  8. Awesome Mac OS Command Line 中文翻译

    awesome-macos-command-line 收集了很多有趣的 Mac 终端命令. 看了一遍后,发现帮助很大. 见识许多没有使用过的命令,加深了对 Mac 的认识. 所以翻译成了中文,共享给其 ...

  9. Invalid escape sequence at line 1 column 29 path $[0].name

    编译报错:Invalid escape sequence at line 1 column 29 path $[0].name 解决:grade.properties 文件下 org.gradle.j ...

  10. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...