https://vjudge.net/problem/UVA-1642

题意:在一个序列中,找出一段连续的序列,使得长度*gcd最大

固定右端点,当左端点从左向右移动时,gcd不变或变大

gcd相同时,序列越长越好

所以相同的gcd只记录最靠左的位置

当右端点由r转移向r+1时

重新计算gcd,然后去重

gcd最多只会有log个

#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 100001
using namespace std;
typedef long long LL;
LL a[N];
void read(LL &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
}
struct node
{
int sum,s[];
LL gcd[];
}cur,nxt;
LL getgcd(LL a,LL b) { return !b ? a : getgcd(b,a%b); }
int main()
{
int T,n;
LL ans,g;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
read(a[i]);
cur.gcd[]=a[]; cur.sum=cur.s[]=;
ans=a[];
for(int r=;r<=n;r++)
{
nxt.sum=;
nxt.s[]=cur.s[];
nxt.gcd[]=getgcd(cur.gcd[],a[r]);
for(int l=;l<=cur.sum;l++)
{
g=getgcd(cur.gcd[l],a[r]);
if(g!=nxt.gcd[nxt.sum])
{
ans=max(ans,nxt.gcd[nxt.sum]*(r-nxt.s[nxt.sum]+));
nxt.sum++;
nxt.gcd[nxt.sum]=g;
nxt.s[nxt.sum]=cur.s[l];
}
}
ans=max(ans,nxt.gcd[nxt.sum]*(r-nxt.s[nxt.sum]+));
if(a[r]!=nxt.gcd[nxt.sum])
{
nxt.gcd[++nxt.sum]=a[r],nxt.s[nxt.sum]=r;
ans=max(ans,a[r]);
}
cur=nxt;
}
printf("%lld\n",ans);
}
}

最新文章

  1. Python3基础 列表之间+ 合并,不去除重复项
  2. 【HTML】HTML特殊符号【转http://www.cnblogs.com/web-d/archive/2010/04/16/1713298.html】
  3. javaweb--下载文件列出
  4. eclipse Juno Indigo Helios Galileo 版本
  5. ios外派—本公司长年提供ios程序员外派业务(北京动点软件,可签合同)
  6. jquery网页字体变大小
  7. 关于Linux的windows目录的挂载
  8. Spark Streaming揭秘 Day22 架构源码图解
  9. Apache log4cxx用法
  10. C# windows窗体程序打包安装及卸载
  11. Spring MVC---基于注解的控制器
  12. about hibernate lazy load and solution
  13. Codeforces Round #350 (Div. 2)_D2 - Magic Powder - 2
  14. JS中的几种函数
  15. Maven-FAQ
  16. python 脚本开发实战-当当亚马逊图书采集器转淘宝数据包
  17. Windows下GO的开发环境配置
  18. win2008server R2 x64 部署.net core到IIS--ASP .NET Core HTTP Error 502.5 – Process Failure
  19. Java的快速失败和安全失败
  20. phpmyadmin无登录表单无法登陆

热门文章

  1. 【SPOJ】Longest Common Substring II (后缀自动机)
  2. [BZOJ1926][SDOI2010]粟粟的书架
  3. 最长k可重线段集问题
  4. Redis之PHP操作
  5. Redis之String
  6. 学习Javascript闭包(Closure)及几个经典面试题理解
  7. 利用Cglib实现AOP
  8. Devstack 安装OpenStack Pike版本(单机环境)
  9. mui实现切换选项卡
  10. 设计模式——职责链模式(C++实现)