题目大意如下:给定一个序列,每个序列有值xi,现给定t个数列,对于每个长n的数列,求一段[l,r]使 [r-l+1]*gcd(l,r)最大,gcd(l,r)指的是该连续区间的最大公约数。

不难想到n^3,n^2logx,n^2的暴力吧

n^3DP,n^2logx暴力枚举,n^2DP

可以这样考虑,每次我对于某一个数,保存若干个值,以i为右端点的区间且gcd为某一值的时候这个区间最大的左端点位置是哪里?

但是你也许会认为这样做状态会不会有点多?更新是不是n方的呢?

其实不是的,因为我们可以从左到右来递推。

什么意思呢?对于每一个数,它与前面构成的gcd一定不会太多(约数肯定不会太多),所以我们最多也只需要保存每一个约数为gcd的时候左边最远能够拓展的位置。

其实远远不要保存每一个约数的位置,因为实际上很多的约数都不是gcd,这样我们就可以由左边的所有状态和右边的一个gcd一次来递推了。

当然,我们也可以直接利用指针的自动排序特性(类似链式前向星),我们碰到一个比当前(r-l+1)*val要小的就更新,因为我们再也尝试不到比它大的了。

{$inline on}

const maxn=;

type edge=^node;
node=record
next,last:edge;
pos,val:int64;
end; var head,tail:edge;
e:array [..maxn] of edge;
n,cnt:longint;
ans:int64;
f:array [..maxn] of int64; procedure addedge(pos,value:int64); inline;
var p:edge;
begin
inc(cnt);
new(p);
p^.next:=head^.next;
p^.last:=head;
p^.next^.last:=p;
p^.last^.next:=p;
p^.pos:=pos;
p^.val:=value;
e[cnt]:=p;
end; procedure delete(var p:edge); inline;
begin
p^.last^.next:=p^.next;
p^.next^.last:=p^.last;
end; procedure init; inline;
begin
ans:=;
cnt:=;
head^.val:=; tail^.val:=;
head^.next:=tail; tail^.last:=head;
head^.last:=nil; tail^.next:=nil;
end; function gcd(a,b:int64):int64; inline;
begin
if a mod b= then exit(b)
else exit(gcd(b,a mod b));
end; function max(x,y:int64):int64; inline;
begin
if x>y then exit(x)
else exit(y);
end; procedure main;
var t,value:int64; i:longint; p:edge;
begin
read(t);
new(head); new(tail);
while t<> do
begin
dec(t);
init;
read(n);
ans:=;
for i:= to n do
begin
read(value);
addedge(i,value);
p:=head^.next;
while p<>tail do
begin
p^.val:=gcd(p^.val,value);
ans:=max(ans,p^.val*(i-p^.pos+));
if p^.val=p^.last^.val then delete(p^.last);
p:=p^.next;
end;
end;
writeln(ans);
end;
end; begin
main;
end.

CERC 2013 Magical GCD的更多相关文章

  1. 4052: [Cerc2013]Magical GCD

    4052: [Cerc2013]Magical GCD Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 148  Solved: 70[Submit][ ...

  2. 【BZOJ】【4052】【CERC2013】Magical GCD

    DP/GCD 然而蒟蒻并不会做…… Orz @lct1999神犇 首先我们肯定是要枚举下端点的……嗯就枚举右端点吧…… 那么对于不同的GCD,对应的左端点最多有log(a[i])个:因为每次gcd缩小 ...

  3. Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。

    /** 题目:Magical GCD UVA 1642 链接:https://vjudge.net/problem/UVA-1642 题意:给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量 ...

  4. 【BZOJ4052】[Cerc2013]Magical GCD 乱搞

    [BZOJ4052][Cerc2013]Magical GCD Description 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续 ...

  5. [BZOJ4052][Cerc2013]Magical GCD

    [BZOJ4052][Cerc2013]Magical GCD 试题描述 给出一个长度在 100 000 以内的正整数序列,大小不超过 10^12.  求一个连续子序列,使得在所有的连续子序列中,它们 ...

  6. UVA - 1642 Magical GCD 数学

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

  7. 【NOIP2014模拟8.17】Magical GCD

    题目 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. 分析 根据暴力的思想, \( ...

  8. BZOJ 4052: [Cerc2013]Magical GCD

    以一个数字开头的子序列的gcd种类不会超过logn种,因此去找相同gcd最长的位置,更新一下答案,复杂度O(nlogn^2) #include<cstdio> #include<al ...

  9. uva 1642 Magical GCD

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

随机推荐

  1. iOS实践01

    去年放假之前大概完成了新浪微博项目,到现在也忘得差不多了,打算在重新写一遍.之前的一些笔记在新浪的博客SleenXiu,在这主要是把新浪微博以随笔的形式写在这,方便以后的复习. 先看看之前主要完成的几 ...

  2. Sql Server之数据库规范——1、自动化规范命名

    一.废话: 随着数据库的规模越来越大,数据库的表也有成百上千,如果需要对数据库表名及字段名做操作,单个还好,直接一条语句搞定了,但如果要对整个库的所有表和字段名做操作,那就显得有点麻烦了.因此,我们需 ...

  3. cocostudio导出plist文件

    今天在用Armature类时用到cocostudio导出文件,由于美术的原因他使用的是中文命名法(这你敢相信),后面在导入程序中跟了下代码发现是解析plist文件有误,我就来比较正常功能文件和有错文件 ...

  4. IE7.JS解决IE兼容性问题方法

    转自:http://code.google.com/p/ie7-js/ 使IE5,IE6兼容到IE7模式(推荐) <!--[if lt IE 7]> <script src=&quo ...

  5. python request模块学习

    安装: pip install requests 使用: import requests HTTP请求:GET.POST.PUT.DELETE.HEAD.OPTIONS 1) get res = re ...

  6. 配置Raspbian 启用SPI I2C

    sudo vi /etc/modprobe.d/raspi-blacklist.conf 找到这两行 blacklist spi-bcm2708 blacklist i2c-bcm2708 注释掉 # ...

  7. [置顶] SpecDD(混合的敏捷方法模型)主要过程概述

    敏捷已成为当今使用最广泛的开发方法.有趣的是,敏捷方法的流行性并不是因为它取代了其他开发方法,相反它与这些方法进行了更好地融合.现实世界众多敏捷项目的成功,也证明了敏捷将走向杂化的未来. SpecDD ...

  8. 男装电子零售商East Dane即将面世_衣装_YOKA时尚网

    男装电子零售商East Dane即将面世_衣装_YOKA时尚网 男装电子零售商East Dane即将面世

  9. C++STL之string (转)

    在学习c++STL中的string,在这里做个笔记,以供自己以后翻阅和初学者参考. 1:string对象的定义和初始化以及读写 string s1;      默认构造函数,s1为空串 string ...

  10. Html 语法学习笔记二

    1.图像标签(<img>)和源属性(Src) 在 HTML 中.图像由 <img> 标签定义.        <img> 是空标签,意思是说,它仅仅包括属性,而且没 ...