博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4488 JSOI2015最大公约数
阅读量:5088 次
发布时间:2019-06-13

本文共 1093 字,大约阅读时间需要 3 分钟。

  显然若右端点确定,gcd最多变化log次。容易想到对每一种gcd二分找最远端点,但这样就变成log^3了。注意到右端点右移时,只会造成一些gcd区间的合并,原本gcd相同的区间不可能分裂。由于区间只有log个,暴力即可。

#include
#include
#include
#include
#include
#include
using namespace std;#define N 100010#define ll long longll read(){ ll x=0,f=1;char c=getchar(); while (c<'0'||c>'9') { if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f;}int n,r[N],tmp[N],head=1,tail;ll a[N],ans,g[N];ll gcd(ll n,ll m){ return m==0?n:gcd(m,n%m);}int main(){#ifndef ONLINE_JUDGE freopen("bzoj4488.in","r",stdin); freopen("bzoj4488.out","w",stdout); const char LL[]="%I64d\n";#else const char LL[]="%lld\n";#endif n=read(); for (int i=1;i<=n;i++) a[i]=read(); for (int i=1;i<=n;i++) { r[++tail]=i;g[tail]=a[i]; for (int j=head;j
=head;j--) { int t=j; while (t>head&&g[t-1]==g[j]) t--; x--,r[x]=r[t],g[x]=g[t]; j=t; } head=x; for (int j=head;j<=tail;j++) ans=max(ans,(i-r[j]+1)*g[j]); } cout<

 

转载于:https://www.cnblogs.com/Gloid/p/9880513.html

你可能感兴趣的文章
iCheck:超级精美的自定义复选框 & 单选按钮
查看>>
10套免费的 Photoshop UI 元素以及 PSD 素材
查看>>
在Linux上安装Git
查看>>
Android显示GIF动画完整示例(一)
查看>>
(图解)情景化知识管理 --- 第三代知识管理典型实践
查看>>
Loadrunner11 安装、破解、汉化的完整安装
查看>>
c++ 带中文汉字的字符串截取
查看>>
OpenCV特征点提取----Fast特征
查看>>
Elasticsearch 优化
查看>>
开发安卓app配置
查看>>
Scala基础知识(二)
查看>>
Python:游戏:300行代码实现俄罗斯方块
查看>>
fedora22 无法联网的情况下rpm安装gcc5.1
查看>>
cocos2dx - 在MFC中使用cocos2dx
查看>>
网络通信协议之ICMP
查看>>
Oracle+Ado.Net(二)
查看>>
1048. Find Coins (25)
查看>>
1097. Deduplication on a Linked List (25)
查看>>
HIS系统结算后,没有更新单据状态为“已结算”
查看>>
java Comparator和Comparable(比较器)
查看>>