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 Output
80
HINT
\(N \le 100000\)
由于gcd每次变化至少减少一半,序列中本质不同的gcd子段只有\(O(nlogn)\)个。对于每个位置\(i\),我们枚举一个gcd值d,二分出一个最小的\(j\)使得\(gcd_{seq_{j \sim i}} = d\)。这个可以用ST表实现,复杂度\(O(nlog^{2}n) \times O(gcd)\)。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef long long ll;
#define maxn (100010)
ll rmq[20][maxn]; int N,bit[maxn*2];
inline ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }
inline ll query(int l,int r)
{
int len = r-l+1;
return gcd(rmq[bit[len]][l],rmq[bit[len]][r-(1<<bit[len])+1]);
}
inline ll work()
{
ll ret = 0;
for (int i = 1;i <= N;++i)
{
ll now = rmq[0][i];
for (int last = i,l,r,mid;last;)
{
l = 1,r = last;
while (l <= r)
{
mid = (l + r) >> 1;
if (query(mid,i) != now) l = mid + 1;
else r = mid - 1;
}
ret = max(ret,(i-r)*now);
if (r) now = gcd(now,rmq[0][r]); last = r;
}
}
return ret;
}
int main()
{
freopen("4052.in","r",stdin);
freopen("4052.out","w",stdout);
for (int i = 1;(1<<i)<=200000;++i) for (int j = 1<<(i-1);j < (1<<i);++j) bit[j] = i-1;
int T; scanf("%d",&T);
while (T--)
{
scanf("%d",&N);
for (int i = 1;i <= N;++i) scanf("%lld",rmq[0]+i);
for (int i = 1;(1 << i) <= N;++i)
for (int j = 1;j+(1<<i)-1 <= N;++j) rmq[i][j] = gcd(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
printf("%lld\n",work());
}
fclose(stdin); fclose(stdout);
return 0;
}
BZOJ 4052 Magical GCD的更多相关文章
- 【BZOJ】【4052】【CERC2013】Magical GCD
DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小 ...
- 4052: [Cerc2013]Magical GCD
4052: [Cerc2013]Magical GCD Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 148 Solved: 70[Submit][ ...
- Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
/** 题目:Magical GCD UVA 1642 链接:https://vjudge.net/problem/UVA-1642 题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量 ...
- 【BZOJ4052】[Cerc2013]Magical GCD 乱搞
[BZOJ4052][Cerc2013]Magical GCD Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续 ...
- [BZOJ4052][Cerc2013]Magical GCD
[BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续子序列中,它们 ...
- UVA - 1642 Magical GCD 数学
Magical GCD The Magical GCD of a nonempty sequence of positive integer ...
- 【NOIP2014模拟8.17】Magical GCD
题目 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. 分析 根据暴力的思想, \( ...
- BZOJ.4052.[Cerc2013]Magical GCD(思路)
BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...
- BZOJ 4052: [Cerc2013]Magical GCD
以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...
随机推荐
- android 双卡手机发短信/判断手机是否为双卡
通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的. phoneType获取方法,iTelephony.getA ...
- JSP内置对象整理(转)
① out - javax.servlet.jsp.jspWriter out对象用于把结果输出到网页上. 方法: 1. void clear() ;清除输出缓冲区的内容,但是不输出到客户端. 2. ...
- PERFORMANCE_SCHEMA 详解
http://keithlan.github.io/2015/07/17/22_performance_schema/ http://www.markleith.co.uk/ http://www.c ...
- 微信上传图文消息素材40007,invalid media_id hint
上传图文消息素材40007,invalid media_id hint,微信40007 >>>>>>>>>>>>>> ...
- 第一篇:杂项之pymysql连接池
杂项之pymysql连接池 杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普 ...
- windows系统 安装MongoDB 32位
本篇文章记录了我在win7 32位下安装MongoDB的步骤,以作记录. 下文的安装方法参考了以下博文: http://www.cnblogs.com/lzrabbit/p/3682510.html ...
- html a标签 图片边框和点击后虚线框的有关问题
html a标签 图片边框和点击后虚线框的问题 一直在在chrome上开发自己的项目,今天上ie和firefix一看,真丑,a标签在使用图片时,多加了蓝色的边框,并且点击后所有a标签都会出现一个虚线框 ...
- 解决如下json格式的字符串不能使用DataContractJsonSerializer序列化和反序列化 分类: JSON 2015-01-28 14:26 72人阅读 评论(0) 收藏
可以解决如下json格式的字符串不能使用DataContractJsonSerializer反序列化 { "ss": "sss", " ...
- orm fluentdata使用相关文章
微型orm fluentdata使用:http://www.360doc.com/content/12/1228/23/9200790_256885743.shtml
- jQuery Ajax(load,post,get,ajax)用法与详解
今天看到群里面有网友们问到Jquery Ajax的(load,post,get,ajax)之间的区别,现在整理了一篇文章出来,希望可以帮到网友们,首先我们先来看一些简单的方法, 这些方法都是对jQue ...