正题

题目链接:https://www.luogu.com.cn/problem/P5502


题目大意

nnn个数,求一个L,RL,RL,R使得最大化(R−L+1)∗gcd(aL,aL+1,aL+1...aR−1,aR)(R-L+1)*gcd(a_L,a_{L+1},a_{L+1}...a_{R-1},a_R)(R−L+1)∗gcd(aL​,aL+1​,aL+1​...aR−1​,aR​)


解题思路

考虑分治,答案分为两种可能

  1. 在l∼midl\sim midl∼mid或mid+1∼rmid+1\sim rmid+1∼r中,分治下去求即可
  2. LLL在l∼midl\sim midl∼mid中,RRR在mid+1∼rmid+1\sim rmid+1∼r中,此时考虑如何计算这个东西

显然amida_{mid}amid​是一定要在答案中的,而如果目前的gcdgcdgcd为www,且左右端点扩展可以使得www不变时那么就一定是扩展的最优,所以我们每次都扩展到无法再扩展时更新答案。无法扩展时我们有两种扩展方法,一种是左端点向左,一种是右端点向右,我们分两次一次往左一次往右即可。

时间复杂度O(nlog⁡nlog⁡ai)O(n\log n\log a_i)O(nlognlogai​)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,a[N],ans;
void solve(ll l,ll r){if(l==r)return;ll mid=(l+r)>>1;solve(l,mid);solve(mid+1,r);ll L=mid,R=mid,w=a[mid];while(l<=L&&R<=r){while(l<L&&__gcd(w,a[L-1])==w)L--;while(R<r&&__gcd(w,a[R+1])==w)R++;ans=max(ans,(R-L+1)*w);if(l<L)w=__gcd(w,a[--L]);else break;}L=mid,R=mid,w=a[mid];while(l<=L&&R<=r){while(l<L&&__gcd(w,a[L-1])==w)L--;while(R<r&&__gcd(w,a[R+1])==w)R++;ans=max(ans,(R-L+1)*w);if(R<r)w=__gcd(w,a[++R]);else break;}return;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);solve(1,n);printf("%lld",ans);
}

P5502-[JSOI2015]最大公约数【分治】相关推荐

  1. P5502 [JSOI2015]最大公约数(gcd性质/min性质/分治)

    P5502 [JSOI2015]最大公约数 对于求解(r-l+1)*gcd(l,r)的最大值,首先我们有一个性质,就是一个前缀的gcd本质不同个数只有log个,所以我们可以利用这个性质,然后每次分治处 ...

  2. bzoj 4488: [Jsoi2015]最大公约数

    4488: [Jsoi2015]最大公约数 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 270  Solved: 154 [Submit][Sta ...

  3. 【bzoj4488: [Jsoi2015]最大公约数】性质题

    4488: [Jsoi2015]最大公约数 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 242   Solved: 141 [ Submit][ ...

  4. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  5. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  6. 保研机试——1基础算法(排序、哈希、模拟(日期、图形、查找、进制、字符串)、递归与分治、贪心)

    写在前面的话:笔者在大三上学期(2022.9.20)对刷算法题基本为0基础,通过博客记录自己的学习过程,本人的学习计划为: 1.大三上学期:首先看<王道计算机机试考研指南>,着重看看保研机 ...

  7. 本文专注于lt;递归算法和分治思想[胖虎学习算法系列]

    本文专注于<递归算法和分治思想> 初衷:博主看到网上有很多人贴出各种OJ上的AC代码,很多都会标注上"递归"两字 我刚开始学习递归算法和分治法的时候,苦于没有人写出递归 ...

  8. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  9. LeetCode简单题之找出数组的最大公约数

    题目 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 . 两个数的 最大公约数 是能够被两个数整除的最大正整数. 示例 1: 输入:nums = [2,5,6,9,10] 输出: ...

最新文章

  1. Python显示图像
  2. 锁类型_ sys.dm_os_wait_stats
  3. 华为nova5ipro的优缺点_华为nova5pro和nova5i的区别
  4. 【Bit-Z月报】11月送出182.4万美元活动奖励,真是豪气
  5. spring核心功能包中已经包含了cglib功能
  6. 【C++】类型转换简述:四种类型转换方式的说明及应用
  7. boost::callable_traits的has_varargs的测试程序
  8. [渝粤教育] 西南科技大学 货币银行学 在线考试复习资料(1)
  9. 那些遇到的position-fixed无效事件
  10. 信息学奥赛一本通 1066:满足条件的数累加 | OpenJudge NOI 1.5 10
  11. akka mysql_Spray + Akka高性能异步IO并发
  12. SQL Server安全机制–如何控制用户能够在报告中查看哪些数据
  13. mysql的data文件夹的位置以及作用
  14. 海量数据搜索---搜索引擎的实现
  15. C/C++犯二程度计算
  16. Springboot 整合 RabbitMQ「三种模式使用」
  17. stream_kws_cnn
  18. Databricks 加载MySQL数据
  19. matlab由两位随机整数构成的矩阵,建立5阶由两位随机整数构成的矩阵A,其语句是( )...
  20. H5页面添加音乐播放

热门文章

  1. php防止快速刷新代码(分享)_php防止网站被刷新的方法汇总
  2. java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)
  3. sql java 创建数据库_java动态创建数据库(sql server)
  4. axios请求拦截器错误_Axios使用拦截器全局处理请求重试
  5. 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
  6. 算法题目中经典问题(易错点)
  7. 数据结构——用栈解决回文字符问题
  8. [JavaWeb-JavaScript]JavaScript_Data日期对象
  9. 十一届蓝桥杯国赛 美丽的2-枚举
  10. Ubuntu上安装使用Docker