给你一个序列s,求区间[l,r]使得gcd(s[l]~s[r])*(r-l+1)最大,输出这个最大值,n<=200000,cases<=20

显然,我们暴力是不可以过的,那么我们考虑一下的做法:

我们维护一个g数组,g[i]表示gcd(s[i]~s[r])

那么我们每次移动r指针,让后重新更新g数组,显然每个g[i]可以O(lg k)更新,但是这样的复杂度依然是n^2lgk

我们发现,对于g[i]=g[j]而且i<j,我们可以把j扔掉不管,这样的话可以将复杂度优化到nlgklgk

为什么?因为显然,g数组是单调的,而且g[i]|g[i+1],那么这就导致g[i+1]>=2*g[i],所以整个g数组长度不会超过lg k

#pragma GCC opitmize("O3")
#pragma G++ opitmize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define L long long
using namespace std;
inline L gcd(L a,L b){for(L c;b;a=b,b=c) c=a%b;return a;
}
struct Num{ int id; L x; } g[100];
int n,t=0; L A=0,x;
int F(){scanf("%d",&n); t=A=0;*g=(Num){0,0};for(int i=1,k;i<=n;++i){scanf("%lld",&x);g[++t]=(Num){i,x};for(int j=k=1;j<=t;++j){g[j].x=gcd(g[j].x,x); A=max(A,g[j].x*(i-g[j].id+1));if(g[j].x!=g[j-1].x) g[k++]=g[j];}t=--k;}printf("%lld\n",A);
}
int main(){int T; for(scanf("%d",&T);T--;F());
}

转载于:https://www.cnblogs.com/Extended-Ash/p/7774403.html

Jzoj3780 Magical GCD相关推荐

  1. Magical GCD

    Description: 对于一个由正整数组成的序列, Magical GCD 是指一个区间的长度乘以该区间内所有数字的最大公约数.给你一个序列,求出这个序列最大的 Magical GCD. INPU ...

  2. UVA Magical GCD

    Magical GCD 题意:给定一个数列,求一个子列,该子列的最大公约数乘上子列长度的值最大,输出最大值.数列的大小是100000,这些数的大小是1-10^12. 解题思路:一开始想的是用暴力,但数 ...

  3. UVa 1642 (综合) Magical GCD

    题意: 给出一个数列,求一个连续的子序列,使得MGCD(i, j) =  该子序列的长度(j-i+1) × 子序列的gcd 最大,并输出这个最大值. 分析: 感觉可能要用优先队列,但貌似也用不上. 但 ...

  4. 【jzoj】2018.2.5NOIP普及组——C组模拟赛

    前言 今天第一次正式C组题,不过--比较恐怖. 正题 题目1:公牛和母牛(jzoj1292) 有n头牛,可以是公牛或母牛,每头公牛之间至少得有k头母牛.求方案数. 输入输出(建议跳过) Input 第 ...

  5. problem solving automation

    分工一定要明确啊啊啊啊啊 Nero 数据结构  图论   DP   博弈 JayYe  数论   DP   模拟搜索 博弈  wuyiqi 数论  数据结构   图论 字符串 模拟搜索  几何  20 ...

  6. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  7. 数论基础(附加例题)

    A Colossal Fibonacci Numbers!                             (循环节) 题意:求fibonacci数列f(a^b)项mod n (0<a, ...

  8. 大视野上每道题的知识点

    https://blog.csdn.net/BOYxiejunBOY/article/details/54773714 在大神基础上细化 1000:A+B 1001:平面图最小割,转对偶图最短路 10 ...

  9. 【业界偷懒】【Public】BZOJ题目一句话题解整理

    转发[Hzwer]: 就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A ...

  10. 【醒目】【业界偷懒】【Public】BZOJ题目一句话题解整理

    就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A过得大部分奶牛题)是别 ...

最新文章

  1. BeanUtils API中使用ConvertUtils向BeanUtils注册一个日期转换器
  2. MAT类如何存储数据
  3. Oracle常用语句记录
  4. IntelliJ IDEA 中,英官网 - 下载地址
  5. p1605迷宫(DFS应该注意的问题)
  6. (转载)python多行注释
  7. chrome开启touch屏幕点击事件
  8. C# MVC使用阿里云对象存储加快图片加载速度(一)
  9. 一个完整的html文件包含哪些标签,HTML基础有哪些单标签
  10. 1090 危险品装箱 (25分)
  11. 福建首个区块链赋能教育信息化项目上线
  12. 各个行业的前端静态页面模板
  13. AIS船舶自动识别系统原理
  14. 史上最详细嵌入式系统设计师修炼手册
  15. C#笔记——自动关机or定时关机小程序
  16. win10计算机管理中没有本地用户和组怎么办
  17. 英特尔服务器主板型号,支持英特尔® Server Board S2600JF
  18. note4x rom android p,红米Note4x安卓8.0刷机包
  19. SysML精粹学习笔记二
  20. daliu_IT学习Android笔记第一篇--Android是什么?安卓的logo来源?安卓的发展过程?

热门文章

  1. Docker入门之安装与卸载
  2. MyBatis中Mapper接口是怎么和XML文件关联起来的
  3. 新零售引发全球关注 阿里巴巴获零售业年度全球最大奖
  4. Mydumper 多线程备份工具
  5. 编译安装Nginx以及配置运行Drupal 8,实现上传进度功能
  6. 在linux本地下载ftp中的文件
  7. c# 更改最大化按钮功能实现最大化时遮盖任务栏,点击Esc取消全屏
  8. .NET Framework总三
  9. MyBatis使用Mapper动态代理开发Dao层
  10. 动态启用和禁用mainfest中组件