【BZOJ4052】[Cerc2013]Magical GCD 乱搞
【BZOJ4052】[Cerc2013]Magical GCD
Description
Sample Input
5
30 60 20 20 20
Sample Output
题解:先思考暴力的做法。我们从一个数开始往左扫,将所有使得gcd改变的位置都记录下来。由于gcd的每次改变都至少/2,所以这样的位置不超过log个。
那么我们直接从左往右扫,暴力维护所有使得gcd改变的位置即可。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn=100010;
int n,m,k;
ll ans;
struct node
{
int x;
ll g;
}p[maxn],q[maxn];
ll gcd(ll a,ll b)
{
return (!b)?a:gcd(b,a%b);
}
inline ll rd()
{
ll ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void work()
{
n=rd(),ans=0;
int i,j;
ll v;
m=0;
for(i=1;i<=n;i++)
{
v=rd();
for(j=1;j<=m;j++) p[j].g=gcd(p[j].g,v);
p[++m].g=v,p[m].x=i;
for(k=0,j=1;j<=m;j++) if(p[j].g>p[j-1].g) q[++k]=p[j];
for(j=1;j<=k;j++) p[j]=q[j],ans=max(ans,(i-p[j].x+1)*p[j].g);
m=k;
}
printf("%lld\n",ans);
}
int main()
{
int T=rd();
while(T--) work();
return 0;
}
【BZOJ4052】[Cerc2013]Magical GCD 乱搞的更多相关文章
- [BZOJ4052][Cerc2013]Magical GCD
[BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续子序列中,它们 ...
- 【数论】【暴力】bzoj4052 [Cerc2013]Magical GCD
考虑向一个集合里添加一个数,它们的gcd要么不变,要么变成原gcd的一个约数.因此不同的gcd只有log个. 所以对于每个位置,维护一个表,存储从这个位置向前所有的不同的gcd及其初始位置,然后暴力更 ...
- 4052: [Cerc2013]Magical GCD
4052: [Cerc2013]Magical GCD Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 148 Solved: 70[Submit][ ...
- 【bzoj4052】[Cerc2013]Magical GCD 暴力
题目描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12. 求一个连续子序列,使得在所有的连续子序列中,它们的GCD值乘以它们的长度最大. 样例输入 1 5 30 60 2 ...
- BZOJ 4052: [Cerc2013]Magical GCD
以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...
- [Cerc2013]Magical GCD
https://vjudge.net/problem/UVA-1642 题意:在一个序列中,找出一段连续的序列,使得长度*gcd最大 固定右端点,当左端点从左向右移动时,gcd不变或变大 gcd相同时 ...
- BZOJ.4052.[Cerc2013]Magical GCD(思路)
BZOJ \(Description\) 给定\(n\)个数的序列\(a_i\).求所有连续子序列中,序列长度 × 该序列中所有数的gcd 的最大值. \(n\leq10^5,\ a_i\leq10^ ...
- 【BZOJ】【4052】【CERC2013】Magical GCD
DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小 ...
- 种树 & 乱搞
题意: 在一个(n+1)*(m+1)的网格点上种k棵树,树必须成一条直线,相邻两棵树距离不少于D,求方案数. SOL: 这题吧...巨坑无比,本来我的思路是枚举每一个从(0,0)到(i,j)的矩形,然 ...
随机推荐
- springBoot 读取配置文件yml中的信息
yml中自定义一些变量 var: analyze_url: test ocr_url: test microsoft_key: test 映射到类变量中 @Getter @Component publ ...
- Android Studio 项目代码运行正常,但是代码爆红处理记录
系统上运行Android项目时,编译正常但是代码爆红,很烦.处理方法记录: clean 项目,执行build. 运行invalidate cache / restart 重启项目. 找到项目.idea ...
- AtCoder Beginner Contest 084 D - 2017-like Number【数论/素数/前缀和】
D - 2017-like Number Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement W ...
- 以root用户身份在jenkins中运行shell命令
以下过程是CentOS 1.打开此脚本(使用VIM或其他编辑器): vim /etc/sysconfig/jenkins 2.找到$JENKINS_USER并更改为“root”: $JENKINS_U ...
- js判断是否是PC,IOS,Android客户端
写在前面 在项目中使用html5,需要针对不同的客户端浏览器有不一样的处理方式,这就需要对请求中的useragent进行分析,并进行处理. 一个例子 <%@ Page Language=&quo ...
- 从C的声明符到Objective-C的Blocks语法
原文链接:http://nilsou.com/blog/2013/08/21/objective-c-blocks-syntax/ 在这个post中,我先以C简单和内置复杂的声明开始,直到我们开始接触 ...
- Copy Records From One Data Block To Another Data Block In Oracle Forms
In this tutorial you will learn to copy the records from one data block to another data block on sam ...
- Linux sed 批量替换字符串和更多用法
比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: # sed -i “s/zhangsan/lisi/g” `grep zhangsan -rl /module ...
- js ioc 实现
var ar=[]; var o1={ id:'o1', o2:null } ar.push(o1); var o2={ id:'o2', o1:null } ar.push(o2) var ioc= ...
- 2016.11.25 activiti的配置文件解析
参考来自activiti的用户手册. activiti的配置文件解析 1.processEngine的配置 注意,单独创建流程引擎与spring方式创建流程引擎是不一样的,区别在于:process ...